【问题标题】:How can I connect a socket to the server?如何将套接字连接到服务器?
【发布时间】:2018-12-28 23:43:23
【问题描述】:

我正在尝试在 client.js 文件中创建一个套接字来与我的服务器通信。我按照官方文档(https://socket.io/docs/#Using-with-Express)没有成功。基本上当我像这样初始化我的套接字时:

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://glitch.com/edit/#!/farlokko-advanced-node

谢谢。

更新:

问题是 passport.socketio 模块的错误初始化,它干扰了icket.io。主要问题可能是存储错误(memoryStore 而不是 mongo-store)和 cookie 的错误键(express.sid 而不是 connect.sid)。

最后套接字初始化没问题,必须是 io.connect("host here")。

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    正如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>
    

    【讨论】:

    • 感谢您的回复。我试过了……也许我在连接函数中传递了错误的字符串;我尝试使用“127.0.0.1”,但我不确定这是否正确。我还尝试了故障项目 url 本身。在我的具体情况下我应该在那里写什么? :)
    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 2019-12-10
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多