Socket.io 不是由 Node.js 服务器提供服务的

Socket.io not being served by Node.js server

本文关键字:服务器 服务 js Node io Socket      更新时间:2023-09-26

据我了解,从 http://socket.io/#how-to-use 开始,node.js会自动在服务器上提供 socket.io 文件。

我已经安装了带有npm install socket.io的 socket.io,我可以看到它驻留在服务器根目录上方node_modules一级。

服务器.js:

    var static = require('./plugins/node-static');
var socketIO = require('socket.io');
var clientFiles = new static.Server('./client');
var http = require('http');
httpServer = http.createServer(function (request, response) {
    request.addListener('end', function () {
            clientFiles.serve(request, response);
        });
}).listen(8253);
var webSocket = socketIO.listen(httpServer);
webSocket.on('connection', function(client) { .....

索引.html:

<html>
<head>
    <title>Chat</title>
</head>
<body>
    <script src="/socket.io/socket.io.js"></script>
    <script type="text/javascript"
            src="http://code.jquery.com/jquery-1.5.2.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            var webSocket = new io.Socket('localhost', { port: 8253 });
            webSocket.connect(); .......

启动服务器工作正常,但是在打开index.html时,我收到以下错误:

GET http://localhost:8253/socket.io/socket.io.js 404 (Not Found)
Uncaught ReferenceError: io is not defined                 :8253/:25

想法?

尝试在

服务器与 socket.io 绑定后侦听

放置这个

httpServer.listen(8253);

var webSocket = socketIO.listen(httpServer);

编辑:抱歉,我写了一些没有回答你问题的东西。

在客户端,您需要以下内容:

var socket = io.connect(); //Hostname and port not required - Autodetected
socket.on('connect', function(){
  $('#status').text('Connected');
});
socket.on('message', function(m){
 $('#message').text(m);
});
socket.on('disconnect', function(){
 $('#status').text('Disconnected');
});

工作示例 => https://github.com/parj/node-websocket-demo/blob/master/public/main.js

NPM 信息(如果需要(:如果您使用的是 Linux

cd <location of your server.js>
npm install -g socket.ion #install globally
npm link socket.io. #Create a symbolic link 

如果你在Windows上,你不能做npm链接

cd <location of your server.js>
npm install socket.io

您的目录结构应如下所示

server.js
node_modules/ #Directory - same level as server.js
    socket.io #socket.io underneath that

node_modules 应该与 server.js 位于同一目录中,而不是在服务器根目录之上

当您从常规快速应用程序转换时:

const express = require('express')
const app = express()
app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

做两件事很重要:

一个(我相信每个人都是对的(:

var server = require('http').Server(app);
var io = require('socket.io')(server);

二(这个很容易错过(:呼叫server.listen而不是app.listen

花了将近两个小时来调试这个,这就是我记录的原因。

您需要

将本地主机添加到脚本 src 标签中,如下所示

<script src="http://localhost:8253/socket.io/socket.io.js"></script>

或者,您可以找到位于node_modules文件夹中的相同文件

<script src="http://localhost:8253/node_modules/socket.io/client-dist/socket.io.js"></script>