当前位置: 首页 > 知识库问答 >
问题:

android java socket.io没有向nodejs服务器发出任何事件

吕文林
2023-03-14

我有一个正在运行的nodejs服务器(通过浏览器,socket.io工作得非常好,可以发射和接收事件)。为了方便地模拟联机连接,im使用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); 

我已经尽我所能尝试了所有其他答案中的每一种方法。当我运行应用程序时,我的服务器确实打印了带有会话ID的日志“Something has Connected:$ID”,但是join事件不会被触发。事实上,我已经安装了套接字通配符,它也不接收任何发出的事件,使用以下代码:

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

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

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

这两个日志上都没有错误,所以我无法完全理解这件事的错误。如何使服务器捕捉。emit()事件?

共有1个答案

姬乐
2023-03-14

我想通了,这里有一个答案给任何有类似问题的人。
套接字服务器在site.com/chat上。当我使用io.socket(URL)时,它决定默认名称空间为“/chat”,但事实并非如此。这就是为什么my.on()事件是触发的。如果我在服务器中添加了一个io.of('/chat'),这些事件就会触发。

因此,一个解决方案是将默认名称空间设置为“/chat”,但我使用了一些有点不同的内容,并添加了

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

所以现在我的emit()开始工作了!

 类似资料:
  • 问题内容: 这是我的代码。我正在尝试使用箭头键使球移动。当我运行上述程序时 ,不显示球 ( 如果我将坐标更改为显示0,30球), 并且事件未触发,球既不移动也不跳跃 ? 问题答案:

  • 我已经看到了许多关于设置nodejs以使用预先存在的smtp服务器的博客和堆栈溢出问题,尤其是通过nodemailer等模块。我已经看到了一些: https://www . zeol earn . com/magazine/sending-and-receiving-emails-using-nodejs 使用smtp客户端发送电子邮件,无需提供密码 如何创建自定义smtp服务器以在Nodejs中

  • 问题内容: 当我在Node服务器上打印请求的内容时,在任何地方都看不到用户数据。 这是我的节点服务器: 这是Angular2代码: 任何人都可以帮我或解释如何处理角度的http请求。 问题答案: 那是你的服务器: 那是您的有角度的客户: 回购https://github.com/kuncevic/angular-httpclient- examples

  • Angular.js:14516可能未处理的拒绝:{“data”:null,“status”:-1,“config”:{“method”:“post”,“transformrequest”:[null],“transformresponse”:[null],“jsonpcallbackparam”:“callback”,“url”:“http://localhost:3000/lvl/2/data

  • 概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“

  • 概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“