Javascript Node.js服务器未提供Socket.io服务
据我所知,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');
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);