5

クライアント側のイベントを発生させることができません。コード/説明を参照してください:

さて、これでうまくいきました(と思います)

クライアント側のコード:

<script src="./Socket.IO/socket.io.js"></script>
<script>
    io.setPath('./Socket.IO/');

    var socket = new io.Socket('jayz.danstanhope.webfactional.com', { 'port': 80 });

    socket.on('connect', function () {
        alert('connect');
    });
    socket.on('message', function (msg) {
        alert('message' + msg);
    });
    socket.on('close', function () {
        alert('close');
    });
    socket.on('disconnect', function () {
        alert('disconnect');
    });
    socket.connect();

</script>

サーバー側コード:

var sys = require("sys")
  , fs = require("fs")
  , path = require("path")
  , http = require("http");
var io = require('/home/danstanhope/webapps/htdocs/Socket.IO-node');

var server = http.createServer(function (req, res) {
    //your normal server code
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.write('Hello world');
    res.end();
});

server.listen(26970);
server = io.listen(server);
server.on('connection', function(client){
    sys.log('client connected');
});

Chrome でページを更新すると、シェルにログが書き込まれていることがわかります。

ここに私が見るものがあります:

danstanhope@web146 htdocs]$ node server.js
9 Aug 19:19:37 - socket.io ready - accepting connections
9 Aug 19:19:40 - Initializing client with transport "websocket"
9 Aug 19:19:40 - Client 21789167495444417 connected
9 Aug 19:19:40 - client connected
9 Aug 19:19:40 - Client 21789167495444417 disconnected

現在の唯一の問題は、これらの JavaScript ソケット アラートのいずれかを起動することです。

また、このエラーは Chrome に表示されます。

Bad Upgrade header: Server: nginx

Date: Wed, 11 Aug 2010 23:06:06 GMT

Transfer-Encoding: chunked

Connection: keep-alive

Upgrade: WebSocket

「悪いヘッダー」を修正する方法についてのアイデアはありますか?

ありがとう、ダン

4

6 に答える 6

3

nginx を使用して標準の HTML リクエストをプロキシすることはできますが、nginx は非 HTTP 1.0 トラフィックをプロキシ経由でまだ転送できないため、websockets または flashsockets 接続はプロキシできません。したがって、websockets は使用できず、Flash は次のようなクロスドメイン ポリシーを送信できません。

<policy-file-request/>\x00

どの nginx が喜んで HTTP 400 エラーをスローしますか。

これを機能させるには、node.js アプリがリッスンしているポートにクライアントを接続する必要があります。

<script src="./Socket.IO/socket.io.js"></script>
<script>
    io.setPath('./Socket.IO/');

    var socket = new io.Socket('jayz.danstanhope.webfactional.com', { 'port': 26970 });

    socket.on('connect', function () {
        alert('connect');
    });
    socket.on('message', function (msg) {
        alert('message' + msg);
    });
    socket.on('close', function () {
        alert('close');
    });
    socket.on('disconnect', function () {
        alert('disconnect');
    });
    socket.connect();

</script>
于 2010-11-26T11:40:30.113 に答える
2

しばらく前にまったく同じ問題が発生しましたが、問題は2つの異なるバージョンのsocket.ioが原因でした。npm を使用して 1 つのバージョンをインポートし、別の開発者から github でクライアント側のバージョンを取得しましたが、互換性がありませんでした。うっかり他人のフォークを使っていないか再確認してください。

于 2010-11-10T18:14:20.897 に答える
2

現時点では、nginx マシンから Websocket を利用することはできません。これは最近修正された可能性がありますが、私の調査によると、現時点では nginx と Apache は websocket をホストできません。ほとんどのリバース プロキシは WebSocket に同意していないようです。

バックエンド websocket サーバーのリバース プロキシとして nginx を使用できますか?

于 2010-11-05T22:09:33.190 に答える
0

Websocketについてはまったくわかりませんが、クライアントコードではポート80でソケットを初期化しますが、サーバーにポート26970でリッスンするように指示します.

于 2010-08-11T14:13:39.557 に答える
0

" Chrome 4 および 5 で使用されるhttps://datatracker.ietf.org/doc/html/draft-hixie-thewebsocketprotocol-75の時点で、応答ヘッダーは次で始まる必要があります。

HTTP/1.1 101 Web ソケット プロトコル ハンドシェイク

アップグレード: WebSocket

接続: アップグレード」

簡単なグーグル検索を行ったところ、これが私が思いついたものです。

于 2010-08-13T01:45:14.363 に答える
-3

メソッド名が「on」ではなく「addEvent」であることを確認してください。ただし、「on」は間違いなく「node-y」になります:)

socket.addEvent('connect', function () {
    alert('connect');
});
socket.addEvent('message', function (msg) {
    alert('message' + msg);
});
socket.addEvent('close', function () {
    alert('close');
});
socket.addEvent('disconnect', function () {
    alert('disconnect');
});
于 2010-08-11T21:42:46.370 に答える