据我所知,从http://socket.io/#how-to-use开始,node.js会自动为服务器上的socket.io文件提供服务。
我已经使用npm install socket.io
安装了socket.io,我可以看到它位于服务器根目录上一层node_modules
。
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(); .......
启动服务器工作正常,但在打开index.html时,我收到以下错误:
GET http://localhost:8253/socket.io/socket.io.js 404 (Not Found)
Uncaught ReferenceError: io is not defined :8253/:25
想法?
答案 0 :(得分:6)
使用socket.io
绑定服务器后尝试侦听服务器放置此
httpServer.listen(8253);
后
var webSocket = socketIO.listen(httpServer);
答案 1 :(得分:3)
编辑:道歉,我写了一些没有回答你问题的东西。
在客户端,您需要以下内容:
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');
});
工作示例=&gt; 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位于同一目录中,而不应位于服务器根目录
之上答案 2 :(得分:1)
当您从常规快递应用转换时:
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
我花了差不多两个小时来调试这个,这就是我记录的原因。
答案 3 :(得分:0)
您需要将 localhost 添加到您的脚本 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>
答案 4 :(得分:-1)
对于那些在Azure上部署的人(我无法担保任何其他平台),请确保您的package.json文件包含一个启动脚本。
示例:
"scripts" : { "start": "node index.js" }