6

しばらくの間、コード/設定の何が問題なのかを突き止めようとしています。基本的には、クライアントからサーバーにメッセージを送信したいと考えています。以下は、 FF(11) と chrome(18.0.1025.152 m)を除くすべてのブラウザーで機能します。

ここにいくつかの情報があります:

  1. Windows 7 エンタープライズ 64 ビット マシンで Node.js を実行しています
  2. Apache を使用して localhost からページを提供します
  3. socket.io を使用してポート 8080 でリッスンしています。
  4. ソケットを使用する代わりに、chrome と FF が xhr-polling / jsonp-polling にフォールバックするように見えます
  5. サーバーからメッセージをプッシュできますが、クライアントから送信できません

サーバーコード:

var io = require('C:/Users/shlomis/node_modules/socket.io/lib/socket.io').listen(8080);

io.sockets.on('connection', function (socket) {
    socket.on('my event', function (msg) {
        console.log("DATA!!!");
    });
});

フルパスなしでrequireする方法が見つかりませんでした

クライアントコード:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>Hello World!</title>
    <meta charset="utf-8">

    <script src="http://localhost:8080/socket.io/socket.io.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            var socket = io.connect('http://localhost:8080');
            $("#button").click(function() {
                socket.emit('my event' ,"Hello World!");
            })
        })
    </script>
</head>

<body>
<button type="button" id='button'>Send Message</button>
</body>

</html>

モジュールのバージョン:

C:\Users\shlomis>npm ls
mukhin_chat@0.0.1 C:\Users\shlomis
├─┬ express@2.5.9
│ ├─┬ connect@1.8.6
│ │ └── formidable@1.0.9
│ ├── mime@1.2.4
│ ├── mkdirp@0.3.0
│ └── qs@0.4.2
└─┬ socket.io@0.9.5
  ├── policyfile@0.0.4
  ├── redis@0.6.7
  └─┬ socket.io-client@0.9.5
    ├─┬ active-x-obfuscator@0.0.1
    │ └── zeparser@0.0.5
    ├── uglify-js@1.2.5
    ├─┬ ws@0.4.12
    │ ├── commander@0.5.2
    │ └── options@0.0.3
    └── xmlhttprequest@1.2.2

ノードログ:

C:\Users\shlomis>node C:\dev\wamp\www\AR\js\videoServer.js
   info  - socket.io started
   debug - served static content /socket.io.js
   debug - client authorized
   info  - handshake authorized 17502185141066845391
   debug - setting request GET /socket.io/1/websocket/17502185141066845391
   debug - set heartbeat interval for client 17502185141066845391
   debug - client authorized for
   debug - websocket writing 1::
   debug - setting request GET /socket.io/1/xhr-polling/17502185141066845391?t=1334041653716
   debug - setting poll timeout
   debug - discarding transport
   debug - cleared heartbeat interval for client 17502185141066845391

chrome WS リクエスト (101 スイッチング プロトコル): ここに画像の説明を入力

クローム XHR リクエスト: ここに画像の説明を入力

更新:追加しました

socket.on('connect', function () {
     console.log("connected");
});

クロムでは決して発火しません。

では、何が間違っているのでしょうか?助けてください:)

4

1 に答える 1

0

クライアントに間違ったsocket.io.jsファイルを使用していると思いますか?

https://github.com/LearnBoost/socket.io-client/tree/master/dist

これらのファイルは、クライアント側のものが置かれているフォルダーで使用する必要があります。 ../js/socket.io.min.js

requireの問題について、npmを使用していますか?nodeJSプロジェクトフォルダーに移動し、以下を実行します。

npm install socket.io

これはnode_modulesプロジェクトフォルダ内のフォルダにインストールされ、実行するrequire('socket.io');ことでモジュールにアクセスできるようになります。

これが機能しない場合は、ノードのインストールが破損している可能性があります。

PS:ファイルに同じポートを使用していますか?ポート8080でsocket.ioファイルを探してから、ソケット接続のためにポート8080でnodeJSに接続しているようです...

別のポートを使用してみますか?

于 2012-05-10T09:17:51.100 に答える