gpt4 book ai didi

java - android java socket.io 不会向 nodejs 服务器发出任何事件

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:24 25 4
gpt4 key购买 nike

我有一个正在运行的 Nodejs 服务器(通过浏览器,socket.io 工作得很好,可以发出和接收事件)。为了轻松模拟在线连接,我使用 ngrok.io 来隧道我的本地主机。这一切都运作良好。我想编写一个连接到同一服务器的小应用程序,但是虽然我的服务器能够接收 socket.connect() 调用,但它没有接收任何 .emit() 事件。
(我使用 com.github.nkzawa:socket.io-client:1.0.0 和 socket.io 2.1.1)

这是相关的服务器代码:

    io.on('connection', function (socket) {
console.log('Something has connected to the server: ' + socket.request.session.id);

socket.on('join', function (username) {
if(!username.username){
username = socket.request.session.username;
}else{
username = username.username;}
console.log('[Socket Chat] '+ username +' has connected to chat');
socket.broadcast.emit('sys message', username + " has joined the chat.");

});

});

同样,这段代码运行良好。

应用程序的其他部分可以很好地连接到我的expressjs服务器,并且能够连接到数据库来验证登录和其他内容。因此连接本身没有问题,只有 socket.io 部分有问题。
这是相关的应用程序代码(我在手机上运行):

 private Socket mSocket;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
try {
//IO.Options opts = new IO.Options();
//opts.port = 3000; tried changing post but didn't help

mSocket = IO.socket(AppConfig.URL_CHAT); // URL_CHAT is correct, and its the same url I use with the browser
}
catch (URISyntaxException e) {
throw new RuntimeException(e);
}

mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError); //theres an emitter.listener for these, and they do trigger if my url is incorrect or my internet is down
mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);

mSocket.connect();
JSONObject obj = new JSONObject();
try {
obj.put("username", Nickname);
} catch (JSONException e) {
e.printStackTrace();
}
//mSocket.open();
mSocket.emit("join", obj);

我已经尽我所能尝试了这里所有其他答案中的所有方法。当我运行该应用程序时,我的服务器确实会打印日志“Something has connect: $id”以及 session ID,但不会触发加入事件。事实上,我安装了套接字通配符,它​​也不会拾取任何发出的事件,使用代码:

socket.on('*', function (packet){
console.log(packet.data);
});

它确实从聊天中获取所有其他事件。

我尝试过发送不同类型的事件、不同的 json 数据、字符串。我注意到的一件事是,在应用程序中,socket.connected() 返回为 false,这很奇怪,因为我的服务器也检测到应用程序何时断开连接。
我尝试将 Node 上的 socket.io 降级到 2.0.0,但这也不起作用。

两个日志上都没有出现错误,所以我无法完全理解这件事出了什么问题。如何让我的服务器捕获 .emit() 事件?

最佳答案

我想通了,这是为有类似问题的人提供的答案。
套接字服务器位于 site.com/chat 上。当我执行 IO.socket(URL) 时,事情决定默认 namespace 将是“/chat”,但事实并非如此。这就是为什么我的 .on() 事件没有触发。如果我将 io.of('/chat') 添加到我的服务器中,这些事件就会触发。

所以一种解决方案是创建默认 namespace “/chat”,但我采用了一些不同的东西并添加了

Manager manager = new Manager(new URI("site.com/chat"));
mSocket = manager.socket("/");

所以现在我的emit()正在工作!

关于java - android java socket.io 不会向 nodejs 服务器发出任何事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52779971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com