套接字io,无法获取或发出消息

时间:2018-07-20 13:39:00

标签: node.js sockets socket.io

我想为我的一个项目尝试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”按钮开始发出消息时(客户端控制台输出“我按下按钮”),服务器上没有收到消息。 因此,以说明服务器控制台为例:

server console

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

谢谢。

1 个答案:

答案 0 :(得分:1)

似乎您正在客户端中使用v1.2。我猜这不是您在服务器上运行的版本吗?您需要同时运行SAME版本。

您可以通过以下方式更改客户代码:

<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版本始终与服务器版本完全匹配。