Javascript Node.js服务器未提供Socket.io服务

Javascript Node.js服务器未提供Socket.io服务,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,据我所知,node.js自动为服务器上的socket.io文件提供服务 我已经用npm install socket.io安装了socket.io,我可以看到它位于服务器根目录上一级的node\u模块中 server.js: var static = require('./plugins/node-static'); var socketIO = require('socket.io'); var clientFiles = new static.Server('./client');

据我所知,node.js自动为服务器上的socket.io文件提供服务

我已经用
npm install socket.io
安装了socket.io,我可以看到它位于服务器根目录上一级的
node\u模块中

server.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) { .....
index.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(); .......

想法?

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

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

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');
});
工作示例=>

NPM信息(如果需要):如果您在Linux中

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

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

在将服务器与socket.io绑定后尝试侦听服务器

放这个

httpServer.listen(8253);
之后


从常规express应用程序转换时:

const express = require('express')
const app = express()
app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})
做两件事很重要:

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

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


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

我不记得自己曾经需要执行这样的魔术,介绍教程也没有建议这样做
npm安装socket.io
应该执行以下操作:“如果您在Windows上”,npm现在支持Windows吗?1/npm on Windows=>cf stackoverflow article-2/Magic?:)教程讨论了npm安装。他们遗漏的是,如果您有多个项目使用同一个库,该怎么办。那么对于每个项目,您是否都要运行npm安装?更好的解决方案(imo)是全局安装它
npm install-g
,然后创建指向它的链接
npm link
。这样你只需要在一个地方安装,只需要升级一个地方。如果你想做一个socket emit(用于传输JSON)和自定义事件-另一个例子-我相信我们中的一个人在这里混淆了一些东西:-)你是在暗示
npm install
在某种程度上是本地项目,而
npm安装-g
是全局的。我的印象是,
npm安装
对于当前用户来说是本地的,而不是一个项目,因此(与您所说的相反)您不会对任何项目执行一次安装。最重要的是,您需要一个root访问权限来执行
安装-g
,不是吗?(我无法在此处选中)“我可以看到它位于服务器根上一级的节点_模块中。”您所说的“服务器根”是什么意思?也许没有被apache的任何痕迹所迷惑?NPM安装的模块驻留在NPM repo中,它们不必位于与项目主节点脚本相关的任何位置。成功的
require('socket.io')
表示安装正常,问题出在代码中。
server.js
node_modules/ #Directory - same level as server.js
    socket.io #socket.io underneath that
httpServer.listen(8253);
var webSocket = socketIO.listen(httpServer);
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);