Socket.IOはクロスドメイン方式で使用できますか?もしそうなら、どうですか?可能性はウェブ上で言及されているが、コード例はどこにも記載されていない。 socket.io FAQを引用Socket.IOでのクロスドメイン接続
答えて
:
は、Socket.IOのサポートクロスドメイン接続をしていますか?
絶対に、すべてのブラウザで!
に、それはそれをしない方法として:ネイティブWebSocketを設計によるクロスドメインあり、socket.ioはXHR2はCORSを使用することができ、最終的にあなたが常にJSONPを使用することができ、クロスドメインのフラッシュ通信のためのフラッシュポリシーファイルを提供しています。
クライアント側のソケットを作成するときに単にあなたのリモートドメイン名を挿入します。
var socket = io.connect('http://example.com:8080');
あまりにも古い答えです。 io.connectは関数ではありません。 –
'io.connect'はまだ動作しているはずです(2016):http://socket.io/docs/#using-with-express-3/4。 socket.io/docs/client-api/も参照してください: "' connect'接続に成功すると起動します。 – vinyll
Socket.ioはクロスドメイン接続をサポートしていますが、あなたのクッキーがサーバに渡されないことに注意してください。
(1)カスタム識別方式(カスタムトークンまたはjavascriptのクッキー)を思いついてください。実際にセッションIDにする必要はありません。セッションハイジャックの危険にさらされます)
または(2)古い古いHTTP JSONP要求をサーバーに送信してからクッキーを取得します。それから、ソケット接続ハンドシェイクで送信されます。
簡単で安全です! io.on前にメインファイルの場所、それを( '接続')で
、行を追加します
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>
正常に動作するはずです。
私は同じ問題を抱えていますが、その問題はありません。 –
あなたはserver.jsアプリケーションの完全なコードを教えてください – zero8
** Socket.IO版 - > 1.3.7 **
は、クロスドメインの方法でSocket.Ioを使用することが可能ですか? はい、絶対に。
もしそうなら、どうですか?
オプション1:デフォルトのWebSocketの強制使用のみ
、WebSocketをクロスドメインです。 Socket.ioにクライアントとサーバーを接続するための手段としてのみ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);
。問題? Webソケットをサポートしていないブラウザ(クライアント用)では動作しません。これでSocket.ioという魔法はかなり消滅します。長いポーリングで徐々にWebSocket(クライアントがサポートしている場合)にアップグレードしてから徐々に始まります。
すべてのクライアントがHTML5に準拠したブラウザであれば、良い結果が得られます。
オプション2:サーバー側でCORSを許可し、Webソケットを使用するかロングポーリングを使用するかをSocket.ioに許可します。
この場合、サーバー側の設定を調整するだけで済みます。クライアント接続は常に同じです。それだ
サーバー側
//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();
});
。それが他の人に役立つことを願っています
あなたは先生です、上司です! – tanwaniniranjan
@tanwaniniranjanそれはあなたを助けることができるとうれしい^ _ ^(しかし、私は '女性のボス'、hehe)です。 – Chayemor
hehe、大丈夫です! あなたは乙です、上司です:) – tanwaniniranjan
実際には、Cross Domain socket.io接続でいくつかの問題が発生しています。 socket.ioがXHR-Polling/Ajaxに戻ったとき、socket.ioは現在のドメイン/socket.io/1に要求を出そうとしますが、これは*** onClose ***を実行できません。*** null ** *。このエラーを調べると、いくつかのgithubの問題が発生しますが、私の状況には当てはまりません(**バグではなく、設定の問題だと思うので**)。 –
この回答は、方法が古くなっています。ブラウザはAjax呼び出しの場合と同じようにWebSocketに対して同じ起点保護を実装します。クロスオリジンsocket.io接続を許可するには、socket.ioサーバーで明示的に有効にする必要があります。 – jfriend00
リンクが無効です。 –