我想为我的一个项目尝试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
谢谢。
答案 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版本始终与服务器版本完全匹配。