私はこの問題に何時間も費やしてきましたが、役に立ちませんでした。
編集:解決策が見つかりました(私の答えを見てください)
プロジェクトの背景
でプロジェクトを構築していますがSymfony2
、これには大きなファイルをアップロードするためのモジュールが必要です。私はNode.js
andを選びましたSocket.IO
(一から学ばなければならなかったので、基本的なことが抜けているかもしれません)。これらを HTML5 File および FileReader API と組み合わせて、クライアントからサーバーにファイルをスライスで送信します。予備テストでは、このアプローチは、すべてが によって処理および提供されるスタンドアロン アプリとしてうまく機能することが示されましたが、およびとNode.js
の統合には問題があるようです。Apache
Symfony2
アプリケーションには、保護されていないセクションと保護されたセクションがあります。私の目標はApache
、ポート80
で使用し、443
組み込みのアプリの大部分を提供するために使用し、ファイルのアップロードのためにポートで使用することです。ソケットに接続するクライアント側のページは によって処理されますが、ソケットは 経由で実行されます。ページは認証されたユーザーがいる安全な環境にあるため、アップロード モジュールは HTTPS 経由で実行する必要があります。Symfony2
Node.js
Socket.io
8080
Apache
Node.js
問題は、イベントを使用しているsocket.emit
か、socket.send
機能していないようです。クライアントからサーバーへ、またはサーバーからクライアントへ、違いはありません。何も起こりませんし、エラーもありません。
コード
示されているコードは、私のコードの単純化されたバージョンであり、混乱や機密データは含まれていません。
サーバ
var httpsModule = require('https'),
fs = require('fs'),
io = require('socket.io');
var httpsOptions =
{
key: fs.readFileSync('path/to/key'),
cert: fs.readFileSync('/path/to/cert'),
passphrase: "1234lol"
}
var httpsServer = httpsModule.createServer(httpsOptions);
var ioServer = io.listen(httpsServer);
httpsServer.listen(8080);
ioServer.sockets.on('connection', function(socket)
{
// This event gets bound, but never fires
socket.on('NewFile', function(data)
{
// To make sure something is happening
console.log(data);
// Process the new file...
});
// Oddly, this one does fire
socket.on('disconnect', function()
{
console.log("Disconnected");
});
});
クライアント
// This is a Twig template, so I'll give an excerpt
{% block javascripts %}
{{ parent() }}
<script type="text/javascript" src="https://my.server:8080/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io.connect("my.server:8080",
{
secure: true,
port: 8080
});
// Imagine this is the function initiating the file upload
// File is an object containing metadata about the file like, filename, size, etc.
function uploadNewFile(file)
{
socket.emit("NewFile", item);
}
</script>
{% endblock %}
問題は...
もちろん、アプリケーションにはこれ以外にも多くの機能がありますが、ここで行き詰まっています。ページはエラーなしで完全に読み込まれますが、発行イベントが発生したり、サーバーに到達したりすることはありません (切断イベントを除く)。クライアントとサーバーの両方でメッセージ イベントを使用して、カスタム イベントのみに問題があるかどうかを確認しましたが、どちらも機能しませんでした。何かがクライアントとサーバーの通信をブロックしていると推測しています (ファイアウォールではないことを確認しました)。
ここで完全に途方に暮れているので、助けてください。