【问题标题】:Socket io, cannot get or emit message套接字 io,无法获取或发出消息
【发布时间】:2018-07-20 13:38:59
【问题描述】:

我想为我的一个项目尝试 socket.io,连接已建立,但我无法在服务器和客户端之间发出或接收消息。

/*****************************
* NodeJs server
*****************************/
const express = require('express');
const app = (module.exports = express());
// Listen the server
const server = app.listen(app.get(port), function(){ ... })
let io = require('socket.io').listen(server);
// Listen socket
io.on('connection', function(socket){
    console.log('your are connected to the chat');
    socket.on('chatmessage', function(msg){
        console.log(msg);
    })
})

下面是客户端部分,它在我的本地机器上,这只是一个包含 socket.js 的简单 html 文件:

/*****************************
* Client part
*****************************/
<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>...</head>
    <body>
        <div id="sendChat">Click here</div>
    </body>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script>
        // with my remote ip
        var chat = io.connect('http://x.x.x.x:5001');
        var btn = document.getElementById('sendChat')
        btn.addEventListener('click', function(){
            console.log('i hit the button');
            chat.emit('chatmessage', 'valeur du chat');
        })
    </script>
</html>

使用此代码,当我打开客户端时,我的服务器控制台输出我:“您已连接到聊天”。但是当我通过点击客户端的“sendChat”按钮(客户端控制台输出'我点击按钮')开始发出消息时,我在服务器部分没有收到任何消息。 所以为了说明服务器控制台:

有人可以帮助我吗? 请注意,有时我也会收到此消息:GET /socket.io/?EIO=3&transport=polling&t=1532094068991-10 404 9.377 ms - 21

谢谢。

【问题讨论】:

  • 看来您在客户端使用的是 v1.2。你在服务器上运行什么版本?您需要在两者上运行相同的版本。您可以将客户端代码从 &lt;script src="https://cdn.socket.io/socket.io-1.2.0.js"&gt;&lt;/script&gt; 更改为 &lt;script src="/socket.io/socket.io.js"&gt;&lt;/script&gt;,即使您更新服务器,客户端也会自动使用与服务器相同的版本。
  • 感谢@jfriend,但我在哪里可以选择这个文件?
  • 路由/socket.io/socket.io.js自动内置到socket.io的服务器版本中。你不需要任何额外的文件来工作。

标签: node.js sockets socket.io


【解决方案1】:

看来您在客户端中使用的是 v1.2。我猜这不是您在服务器上运行的版本?您需要在两者上运行相同的版本。

您可以从此更改您的客户端代码:

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 

到这里:

<script src="/socket.io/socket.io.js"></script> 

然后客户端将自动使用与服务器相同的版本,即使您更新服务器。路由 /socket.io/socket.io.js 自动内置到 socket.io 服务器代码中,因此您不需要任何其他文件或路由来使该路由“正常工作”。这样,每当您升级服务器时,客户端版本都会自动升级(服务器中嵌入了一个客户端)。

如果要使用 CDN,则必须手动确保 socket.io 客户端的 CDN 版本始终与服务器版本完全匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2014-11-20
    • 1970-01-01
    • 2015-07-09
    • 2018-06-05
    • 2018-05-14
    • 2023-03-24
    相关资源
    最近更新 更多