我是使用节点js(ws库)开发的网页登录服务器
我想将聊天模块添加到android应用程序。我正在为websocket客户端使用okhttp。当从设备连接时,它正在工作。但是当连接第二台设备时,它不工作。只有第一台设备websocket.on(“消息”)事件发射器会做出响应。另一台设备不监听onMessage。只有一台设备监听A. B-
如何配置onMessage在所有设备上工作?
java客户端:
class SConnection {
SConnection(String url) {
mClient = new OkHttpClient.Builder()
.readTimeout(3, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build();
mServerUrl = url;
}
public enum ConnectionStatus {
DISCONNECTED,
CONNECTED
}
public interface ServerListener {
void onNewMessage(String message);
void onStatusChange(ConnectionStatus status);
}
private WebSocket mWebSocket;
private OkHttpClient mClient;
private String mServerUrl;
private Handler mMessageHandler;
private Handler mStatusHandler;
private ServerListener mListener;
public class SocketListener extends WebSocketListener {
@Override
public void onOpen(WebSocket webSocket, Response response) {
Message m = mStatusHandler.obtainMessage(0, ConnectionStatus.CONNECTED);
mStatusHandler.sendMessage(m);
}
@Override
public void onMessage(WebSocket webSocket, String text) {
Message m = mMessageHandler.obtainMessage(0, text);
mMessageHandler.sendMessage(m);
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
Message m = mStatusHandler.obtainMessage(0, ConnectionStatus.DISCONNECTED);
mStatusHandler.sendMessage(m);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
disconnect();
}
}
void connect(ServerListener listener) {
Request request = new Request.Builder()
.url(mServerUrl)
.build();
mWebSocket = mClient.newWebSocket(request, new SocketListener());
mListener = listener;
mMessageHandler = new Handler(msg -> {mListener.onNewMessage((String) msg.obj); return true;});
mStatusHandler = new Handler(msg -> { mListener.onStatusChange((ConnectionStatus) msg.obj); return true;});
}
void disconnect() {
mWebSocket.cancel();
mListener = null;
mMessageHandler.removeCallbacksAndMessages(null);
mStatusHandler.removeCallbacksAndMessages(null);
}
void sendMessage(String message) {
mWebSocket.send(message);
}
nodejs中的websocket服务器:
module.exports = (httpsServer) => {
const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({
server: httpsServer
});
wss.on('connection', function connection(ws) {
console.log('connected');
ws.on('message', function incoming(message) {
...
ws.send(JSON.stringify(response));
});
});
wss.on('close', function close() {
console.log('disconnected');
});
};
也许添加这个解决问题,但如何?
{'force new connection':true}
首先了解问题,阅读所有评论:
wss.on('connection', function connection(ws) {
// So here ws is the user got connected
console.log('connected');
// This will be fired when connected user send message
ws.on('message', function incoming(message) {
...
// this will send message to the same user
ws.send(JSON.stringify(response));
});
});
解决方案:所以你需要做的就是让所有客户都寄给所有期望自己,这就是你如何做到的:
ws.on('message', function incoming(data) {
// Broadcast to everyone else.
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
});
有关更多详细信息,请阅读
我正在使用OkHTTP客户端访问HTTP/2服务器。我有一个用例,我想在同一个连接上打开多个流。 我正在使用以下代码创建OkHTTP客户端。 此客户端在连接池中可以有5个打开的连接。现在我想使用上面的客户端提出以下请求, 我希望这些请求在同一个连接上作为一个单独的流,而不是一个新的连接。我该怎么做?
在我在Intellij中运行的spring boot应用程序中,我有一个@Scheduled任务,两个WebSocket流使用OkHttp连接从两个不同的OkHttpClients实例打开到两个不同的服务器。我不认为OkHttpClient中的连接池设置。Builder与此相关,因为OkHttpClient有两个实例。两个websocket流最初都接收一些事件,然后其中一个不再接收任何事件。我还通
问题内容: 目前,我的连接 mongoose.js 具有以下代码: 需要连接的文件是 test.js : 如何更新mongoose.js以使用mongoose.createConnection(…)函数使用多个连接? 当我进行如下更改时,我仅从一个连接的更改开始: 我得到“未定义不是函数”。如果我使用此代码: 我收到“错误:尝试打开未关闭的连接” 有什么建议吗? 问题答案: mongoose通过
我有一些元素,我想通过JSPlumb社区版将它们连接起来。我在javascript中有以下代码行: 我想做的是在运行时制作两个和一个,并将两个源endpoint连接到目标endpoint,但当我将一个源endpoint连接到目标endpoint时,目标不会接受第二个源endpoint。我该怎么做?
在请求完成后,应该如何告诉OkHttp关闭与HTTP服务器的连接? 假设我使用以下代码向google发出请求。通用域名格式 通过使用“连接:关闭”,我能够让远程服务器发送FIN(如果我不这样做,远程服务器只是挂起等待新请求)。尽管如此,在客户端没有产生FIN,并且连接保持半打开显然有一段不确定的时间。
我想将配置文件中的多个Cassandraendpoint提供给我的Java应用程序。 例如:cassandra主机:“主机1,主机2” 我尝试了< code > addContactPoints(host),但它不起作用。如果其中一个Cassandra节点关闭,我不希望我的应用程序关闭。