如何将套接字连接到服务器?

时间:2018-12-26 19:00:00

标签: node.js express socket.io

我正在尝试在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”)。

1 个答案:

答案 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>