簡體   English   中英

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 ,我可以看到它位於服務器根目錄上一級的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

想法?

用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

我花了將近兩個小時調試這個,這就是我記錄的原因。

對於那些在Azure上部署(我無法擔保任何其他平台)的人,請確保您的package.json文件包含一個啟動腳本。

例:

"scripts" : { "start": "node index.js" }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM