【问题标题】:Socket.io integration NodeSocket.io 集成节点
【发布时间】:2017-01-30 10:13:21
【问题描述】:

嘿,我是 socket 和 node 的新手,正在使用 socket.io 进行聊天。

这是我的 index.js 文件:

var app = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res) {
   //route handler serve index.html file
   res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket) {
    console.log('A user has connected');
    socket.on('disconnect', function() {
        console.log("A user has disconnected");
    })
})

http.listen(3000, function() {
    console.log('listening on port 3000');
});

**这是我的 index.html:**

<html>
<head>
    <title> Chat </title>
    <script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
    <script>
        var socket = io();
    </script>
</head>
<body>
    <ul id="messages"></ul>
    <form action="">
        <input id="m" autocomplete="off"/> <button> Send </button>
    </form>
</body> 

我不断收到一个引用错误,说 io 未定义。我尝试将套接字链接为 cdn 和我的服务器 url。

【问题讨论】:

  • 服务器上也需要 socket.io。尝试安装socket-io并添加以下代码var io = require('socket.io')(app);.
  • @HimaniAgrawal 谢谢,这工作!

标签: node.js sockets express io referenceerror


【解决方案1】:

需要在服务端加载并初始化socket.io:

var app = require('express')();
var http = require('http').Server(app);

// add this line
var io = require('socket.io')(http);

这会加载 socket.io 模块,将其注册到您的 Web 服务器,以便它可以连接到其中,然后声明并分配 io 变量。

附:您的客户端正在链接到 socket.io 1.0.0,这是一个相当旧的版本。您可能应该让您的 socket.io 服务器处理为 socket.io 客户端提供服务,方法是将您的客户端脚本标记更改为:

<script src="/socket.io/socket.io.js"></script>

这将自动为客户端提供服务器上匹配的 socket.io 版本(因此它们将始终与同一版本同步)。这是可行的,因为require('socket.io')(app) 所做的一件事就是为/socket.io/socket.io.js 注册一个路由处理程序。

【讨论】:

  • var io = require('socket.io')(http);为我做了诀窍,谢谢!所以基本上我需要在客户端和服务器端都引用它?
  • @rxa - 好吧,你必须在客户端和服务器端初始化 socket.io。
猜你喜欢
  • 2017-01-21
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多