메시징 목적으로 프로젝트에 websocket 기능을 사용하고 있습니다. 다음 링크에서 다운로드 한 PHP websocket을 사용하고 있습니다. https://github.com/Flynsarmy/PHPWebSocket-Chat. 하지만 내 문제는 내 웹 소켓이 자동으로 잠시 끊어지고 다시 자동으로 다시 연결된다는 것입니다. 이 때문에 내 메시지가 없어지고 있습니다. 그래서 아무도 내가이 문제를 해결할 수있는 방법을 말해 줄 수 있습니다. 이 문제를 극복 할 수 있도록 코드에서 수정할 수 있습니까? 고맙습니다. 다음PHP websocket 자동으로 연결이 끊어집니다.
내 server.php 파일
<?php
// prevent the server from timing out
set_time_limit(0);
// include the web sockets server script (the server is started at the far bottom of this file)
require 'class.PHPWebSocket.php';
// when a client sends data to the server
function wsOnMessage($clientID, $message, $messageLength, $binary) {
global $Server;
$ip = long2ip($Server->wsClients[$clientID][6]);
// check if message length is 0
if ($messageLength == 0) {
$Server->wsClose($clientID);
return;
}
//The speaker is the only person in the room. Don't let them feel lonely.
if (sizeof($Server->wsClients) == 1)
$Server->wsSend($clientID, "There isn't anyone else in the room, but I'll still listen to you. --Your Trusty Server");
else
//Send the message to everyone but the person who said it
foreach ($Server->wsClients as $id => $client)
if ($id != $clientID)
$Server->wsSend($id, "Visitor $clientID ($ip) said \"$message\"");
}
// when a client connects
function wsOnOpen($clientID)
{
global $Server;
$ip = long2ip($Server->wsClients[$clientID][6]);
$Server->log("$ip ($clientID) has connected.");
//Send a join notice to everyone but the person who joined
foreach ($Server->wsClients as $id => $client)
if ($id != $clientID)
$Server->wsSend($id, "Visitor $clientID ($ip) has joined the room.");
}
// when a client closes or lost connection
function wsOnClose($clientID, $status) {
global $Server;
$ip = long2ip($Server->wsClients[$clientID][6]);
$Server->log("$ip ($clientID) has disconnected.");
//Send a user left notice to everyone in the room
foreach ($Server->wsClients as $id => $client)
$Server->wsSend($id, "Visitor $clientID ($ip) has left the room.");
}
// start the server
$Server = new PHPWebSocket();
$Server->bind('message', 'wsOnMessage');
$Server->bind('open', 'wsOnOpen');
$Server->bind('close', 'wsOnClose');
// for other computers to connect, you will probably need to change this to your LAN IP or external IP,
// alternatively use: gethostbyaddr(gethostbyname($_SERVER['SERVER_NAME']))
$Server->wsStartServer('127.0.0.1', 9300);
?>
입니다 그리고 자바 스크립트 코드는
var FancyWebSocket = function(url)
{
var callbacks = {};
var ws_url = url;
var conn;
this.bind = function(event_name, callback){
callbacks[event_name] = callbacks[event_name] || [];
callbacks[event_name].push(callback);
return this;// chainable
};
this.send = function(event_name, event_data){
this.conn.send(event_data);
return this;
};
this.connect = function() {
if (typeof(MozWebSocket) == 'function')
this.conn = new MozWebSocket(url);
else
this.conn = new WebSocket(url);
// dispatch to the right handlers
this.conn.onmessage = function(evt){
dispatch('message', evt.data);
};
this.conn.onclose = function(){dispatch('close',null)}
this.conn.onopen = function(){dispatch('open',null)}
};
this.disconnect = function() {
this.conn.close();
};
var dispatch = function(event_name, message){
var chain = callbacks[event_name];
if(typeof chain == 'undefined') return; // no callbacks for this event
for(var i = 0; i < chain.length; i++){
chain[i](message)
}
}
};
사용중인 코드를 표시하십시오. –
나는 Patrik에게 답장을 보내 주셔서 감사합니다. 링크 위의 코드 양식을 얻을 수 있습니다. –
user2260521
아니요, 다운로드 한 곳에서 실제로 사용하고있는 코드가 필요합니다. 우리가 실제로 사용하고있는 코드를 보지 못한다면 문제가 있으면 도움을 줄 수 없습니다. 그리고 관련된 부분 만. –