2017-11-29 18 views
0

外部ドメインからnode.jsサーバーに接続できない場合があります。それはノードを介してHTTP Webサーバーを使用してローカルで実行するときにうまく動作しますが、外部から接続するときはsocket.io.jsファイルを読み込みますが、ソケットを使用しようとするとURLからポートを削除して接続できません。クライアントがsocket.ioを使用してサーバーに接続できません

代わりにネットワーク要求にこれを行う:

http://external-domain.com:3000/socket.io/?EIO=3&transport=polling&t=M06GOUU

それがないこの:

http://external-domain.com/socket.io/?EIO=3&transport=polling&t=M06GOUU

私はそれからポートを削除しないようにする方法をわかりません接続。これを修正するにはどうすればいいですか?

サーバ

const path = require('path'); 
const http = require('http'); 
const express = require('express'); 
const socketIO = require('socket.io'); 

const publicPath = path.join(__dirname, '../public'); 
var app = express(); 
var server = http.createServer(app); 
var io = socketIO(server); 

app.use(express.static(publicPath)); 

server.listen(3000,() => { 
    console.log(`Server is up on port 3000`); 
}); 

クライアントスクリプトタグ

<script src="http://external-domain.com:3000/socket.io/socket.io.js"></script> 

CLIENT JSあちこちに、別のドメインON

var socket = io(); 

socket.connect('http://external-domain.com:3000'); 

socket.on('connect', function() { 
    console.log('Connected to server.'); 
}); 

答えて

3

変更メートルこの:

var socket = io(); 
socket.connect('http://external-domain.com:3000'); 

にちょうどこの:あなたはすでにio("http://external-domain.com:3000");コールとの接続を要求してきますよう

var socket = io("http://external-domain.com:3000"); 

そして、あなたはsocket.connect()を使用しないでください。


説明

コード:

var socket = io(); 

がその原点でsocket.ioサーバーに接続するためにページのURLを使用しています。それはあなたが望むものではない(明らかに)。

あなたが.connect()メソッドを使用したい場合は、それはこのようになります:

var socket = io.connect("http://external-domain.com:3000"); 

注:var socket = io(url)は、単にvar socket = io.connect(url)のショートカットです。

socket.connect()はパラメータとしてURLを受け入れないため、正しく使用していないだけです。それはちょうどsocket.open()の同義語です。

+0

ああ、うわー、それは動作します、ありがとう!ちょうど興味があります、両者の違いは何ですか? – FirstLegion

+0

@FirstLegion - 私の答えに詳しい説明が追加されました。 – jfriend00

+0

感謝しています。ありがとうございました! – FirstLegion

0

使用io.connect( "URL")

var socket = io.connect("http://external-domain.com:3000", { rejectUnauthorized: false }); 

// { rejectUnauthorized: false }はオプションのパラメータです。

これはうまくいきます。

+0

正しいURLが見つからないため、拒否されても問題はないようです。 – FirstLegion

関連する問題