質問

クロスドメイン方式でsocket.ioを使用することは可能ですか?もしそうなら、どうですか?可能性はWeb周りに記載されていますが、どこでもコード例はありません。

役に立ちましたか?

解決

socket.io FAQ

socket.ioはクロスドメイン接続をサポートしていますか?

絶対に、すべてのブラウザで!

ネイティブWebSocketはデザインによってクロスドメインであるSocket.ioでは、クロスドメインフラッシュ通信のフラッシュポリシーファイルを処理し、XHR2はCORSを使用でき、ついにJSONPを使用できます。

他のヒント

** socket.ioバージョン - > 1.3.7 **

クロスドメイン方式でソケットを使用することは可能ですか? はい、絶対に。

であれば、どのように?

オプション1:WebSocketsのみの使用のみ

デフォルトでは、WebSocketsはクロスドメインです。 Socket.ioを強制的に使用して、クライアントとサーバーを接続するための手段だけを使用する場合は、行ってもいいです。

サーバ側

//HTTP Server 
var server = require('http').createServer(app).listen(8888);
var io = require('socket.io').listen(server);

//Allow Cross Domain Requests
io.set('transports', [ 'websocket' ]);
.

クライアント側

var connectionOptions =  {
            "force new connection" : true,
            "reconnectionAttempts": "Infinity", //avoid having user reconnect manually in order to prevent dead clients after a server restart
            "timeout" : 10000, //before connect_error and connect_timeout are emitted.
            "transports" : ["websocket"]
        };

 var socket = io("ur-node-server-domain", connectionOptions);
.

それはそれです。問題? WebSocketsをサポートしていないブラウザ(クライアント用)には機能しません。これにより、Socket.ioであるマジックをほとんど殺して、後でWebSockets(クライアントがサポートしている場合)

あなたがすべてのクライアントがHTML5準拠のブラウザにアクセスすることができることを100%確信している場合は、行ってもいいです

オプション2:サーバー側でCORを許可する、socket.ioにWebSocketまたはLong Pollingを使用するかどうかを処理させます。

この場合は、サーバー側の設定を調整するだけです。クライアント接続は常に同じです。

サーバ側

//HTTP Server 
var express=require('express');
//Express instance
var app = express();

//ENABLE CORS
app.all('/', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
 });
.

それはそれです。それが他の誰かを助けることを願っています

クライアント側ソケットを作成するときにリモートドメイン名を挿入するだけです。

var socket = io.connect('http://example.com:8080');
.

socket.ioはクロスドメイン接続をサポートしていますが、Cookieがサーバーに渡されないことに注意してください。あなたは次のいずれかにする必要があります。

(1)代替の識別方式(カスタムトークンまたはJavaScript Cookie--は、セッションのハイジャックの危険にさらさない限り、これを実際にセッションIDにしないでください)を覚えておくべきではありません。P>

または(2)最初に古い昔ながらのHTTP JSONP要求を最初にサーバーに送ります。その後、ソケット接続ハンドシェイクW / The Socket Connection Handshakeに送信されます。

簡単でセキュリティ!

メインファイルの前にio.on( 'connection')の前に配置し、行を追加します。

io.set('origins', 'yoursite.com:*');

io.on('connection', function (socket) {
.

はい、そうです。 私はそれが機能するかどうかをテストするためにクロスドメインSocket.ioを実装しました。

<script src="http://your-nodejs-domain.com:3000/public/js/jquery.js"></script>
  <script src="http://your-nodejs-domain.com:3000/socket.io/socket.io.js"></script>
  <script>

      var socket = io.connect('http://your-nodejs-domain:3000');
      $(document).ready(function(){

          socket.on('test message', function(msg){
               console.log("Got the message: " + msg);
          });
      });

  </script>
.

それはうまくいくはずです。

このようなIOでサーバーを作成します。

const server = require('http').createServer();

const io = require('socket.io')(server, {
    origins:["127.0.0.1:8000"],
    path: '/',
    serveClient: false,
    // below are engine.IO options
    pingInterval: 20000,
    pingTimeout: 5000,
    cookie: false
});

io.on('connection', function(socket){
    console.log("here new user welcom")
});


server.listen(3000,function(){
    console.log('listening on *:3000')});
.

起源配列で有効な原点を指定

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top