Socket.io 不是由 Node.js 服务器提供服务的
Socket.io not being served by Node.js server
据我了解,从 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>
相关文章:
- 通过服务Angular向服务器发送$routeParam
- Node.JS:从服务器端内存服务文件与服务器端文件
- 从服务器获取数据,并使用$http服务和ng-change在select事件上显示它
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 服务回调中的KendoUI网格服务器动态列绑定
- 内部服务器错误在 post 请求中使用 Angular js 中的自定义服务
- 服务工作者请求,服务器不断响应
- 将控制器与与服务器交互的服务分离的任何好处
- 从另一台服务器获取node.js中的服务映像
- 只有在angular服务从服务器获取数据并完成执行后,才能执行特定的代码块
- 移动服务服务器脚本(计划)是否可以访问其他Sql Azure数据库
- Socket.io 不是由 Node.js 服务器提供服务的
- 使用REST POST服务,当服务器接收到请求时输入为空
- 如何在使用Webpack后在静态服务器上服务我的React web应用程序
- WCF服务无法在托管服务器上运行的原因
- 如何将.js文件包含到由复合服务器提供服务的html文件中
- 如何使用javascript从远程服务器上使用.net web服务
- Angular远程服务器web服务授权
- node.js服务器无法在虚拟机(Azure云服务)中工作
- 如何查询id IN [some-array-of-numbers]"在azure移动服务中(服务器脚本)