【发布时间】: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。你在服务器上运行什么版本?您需要在两者上运行相同的版本。您可以将客户端代码从
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>更改为<script src="/socket.io/socket.io.js"></script>,即使您更新服务器,客户端也会自动使用与服务器相同的版本。 -
感谢@jfriend,但我在哪里可以选择这个文件?
-
路由
/socket.io/socket.io.js自动内置到socket.io的服务器版本中。你不需要任何额外的文件来工作。