我正在尝试在client.js文件中创建一个套接字以与服务器通信。我没有遵循官方文档(OSHI library)。基本上当我这样初始化我的套接字时:
var socket = io();
我希望服务器收到一条消息(例如“用户已连接”),但什么也没有出现,因此我假设连接永远不会发生。
这是在Glitch上制作的项目。我试图遵循socket.io文档,简单示例或其他问题提示。在实例化套接字和cdn之前,我都尝试了建议的脚本。
// server.js
//dependencies
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
//listening to the port
http.listen(process.env.PORT || 3000, () => {
console.log("Listening on port " + process.env.PORT);
});
io.on('connection', function(socket){
console.log('A user has connected.');
});
// chat.html
//this is called right before </body>
<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js'></script>
<script src='/socket.io/socket.io.js'></script>
<script src='/public/client.js'></script>
// client.js
var socket = io();
client.js已按预期加载(并且控制台未引发任何错误),但是我看不到“用户已连接”。
您可以在https://socket.io/docs/#Using-with-Express此处查看完整的源代码
谢谢。
更新:
问题是passport.socketio模块的初始化错误,这干扰了didet.io。主要问题可能是错误的存储(memoryStore而不是mongo-store)和错误的cookie密钥(express.sid而不是connect.sid)。
最后,套接字初始化没问题,必须为io.connect(“ host here”)。
答案 0 :(得分:0)
按照doc的指定,您必须配置客户端以连接到本地主机,然后在连接上,您将收到消息:
<script>
var socket = io.connect('http://localhost'); // <--- HERE MAN
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>