1

このすべてのプッシュ通知がどのように機能するかを理解しようとしています。プッシュ技術のテストを試みましたが、これまでのところ失敗しました。

基本的な仮定は次のとおりです:
1) Apache Web サーバーをメインアプリケーションの Web サーバーとして使用する (すべてのコードがそれを使用しているため必須)
2) node.js テクノロジーのクロスブラウザープッシュ通知サーバー (socket.io が提供されているため、クロスブラウザ)。

これまでのところ失敗しましたが、ここに私のコード(p1.html)があります:

<!doctype html>
<html>
<head>

<meta charset="UTF-8">
<title>P1</title>
</head>
<body>

<h1>P1</h1>
<section id="content"></section>
<script src="/socket.io.js"></script> <!--socket.io-->
<script src="/socket.js"></script> <!--socket.io-client-->
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>

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

socket.on('notification', function (data) {
$('#content').append(data.message + '<br>')

});

</script>

</body>

</html>

そして私のサーバースクリプト(p1.js):

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, url = require('url')
app.listen(8080);

console.log("creating a connection");
io.sockets.on( 'connection', function ( socket ) {

console.log("runing time");
sendTimeMessage(socket);
});

function sendTimeMessage(socket){

console.log("in time");
var time= new Date().getTime();
console.log(time);
socket.volatile.emit( 'notification' , time );
setTimeout(sendTimeMessage, 5000);
}

function handler (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("");
}

function sendMessage(message) {

io.sockets.emit('notification', {'message': message});
}

  • 例の IP をローカル ホストに変更したので、構文に誤りがないことを願っています。
  • 私が実行すると、Apache Webサーバーがデータを表示するものであり、socket-ioがいくつかのフィールドを更新するという考えです。

現在の状態:
1. socket.io-client js ファイルを追加しないと、socket.io-client の参照エラーが発生します
2. socket.io-client を追加すると、"ReferenceError: require is not defined [このエラーで中断] 'undefined' != typeof io ? io : module.exports

私はそれを理解し、それを機能させるのに本当に助けが必要です。私はまた、これを実現するために本当に助けが必要な代替ソリューションに対しても心を開いています.

4

3 に答える 3

2

OK、私はIRCの人たちの多大な助けを借りて部分的に解決しました:1)ポート80でApacheを介したHTML 2)ポート8080でHTMLを更新するライブ通知サービス

(関数から到着した値にまだコードの問題があり、完全にデバッグされていない可能性があります)

p1.html(クライアント)

<!doctype html>
<html>

<head>

<meta charset="UTF-8">
</head>
<body>
<section id="content"></section>
<script src="/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>

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

socket.on('notification', function (from,msg) {

$('#content').append(msg.message + '<br>')

});

</script>

</body>

</html>

p1.js(サービス)

var io = require('socket.io').listen(8080)
console.log("creating a connection");
io.sockets.on( 'connection', function ( socket ) {

console.log("runing time");
var oldtime= new Date().getTime();
while (1){

var newtime= new Date().getTime();
if (newtime%5323==0 && newtime != oldtime){

oldtime = newtime;
console.log(newtime);
socket.emit( 'notification' , {'message': "the time is - " + newtime} );

}

}

});

楽しい

于 2013-01-10T21:34:52.263 に答える
2

あなたが達成したいことの実例。最初の間違いは、クライアント側の間違った JavaScript パスです。正しいものは /socket.io/socket.io.js です。2 番目の間違いは、存在しない socket.volatile の使用です。

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, url = require('url')


console.log("creating a connection");

io.sockets.on( 'connection', function ( socket ) {
  console.log("runing time");
  sendTimeMessage(socket);
});

function sendTimeMessage(socket){
  console.log("in time");
  var now= new Date().getTime();
  socket.emit('notification', {'message': now});
  setTimeout(function() {
    socket.emit('notification', {'message': "after 5s"});
  },5000);
}

function handler (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end("<html><script src=\"/socket.io/socket.io.js\"></script> <!--socket.io--><script>io.connect().on('notification', function (data) {console.log(data)});</script></html>");
}

app.listen(8080);
于 2013-01-10T11:50:41.360 に答える