Jump to content
Melde dich an, um diesem Inhalt zu folgen  

WebSockets verbinden sich nicht richtig

Empfohlene Beiträge

Hallo zusammen,

ich versuche gerade einen Websocket-Server aufzusetzen und ne Art kleinen Chat draus zu machen. Der Server selbst läuft mittlerweile, doch wenn ich mich mit zwei verschiedenen Browsern anmelde, sind die Browser nicht wie erwartet am selben Server angemeldet, bzw bekommt zumindest der eine Browser nicht die erwartete Nachricht vom anderen Browser. Ich finde meinen Fehler schon den ganzen Tag nicht, vielleicht hat ja jemand Lust mal drüberzuschauen und mir ggfs etwas Zeit zu sparen:

WSS.php: (Die Datei, die als Deamonscript per Shell gestartet wurde)

<?php
require_once ($_SERVER['DOCUMENT_ROOT'] ."/Websockets/so/abstractwebsocketserver.php");

class WebSocketServer extends AbstractWebSocketServer {

	
	protected function process($user, $message) {
		$this->sendToAllConnectedUsers($message);
	}

	protected function connected($user) {
		// Do nothing: This is just an echo server, there's no need to track the user.
		// However, if we did care about the users, we would probably have a cookie to
		// parse at this step, would be looking them up in permanent storage, etc.
	}

	protected function closed($user) {
		// Do nothing: This is where cleanup would go, in case the user had any sort of
		// open files or other objects associated with them. This runs after the socket
		// has been closed, so there is no need to clean up the socket itself here.
	}

}

$server = new WebSocketServer("127.0.0.1", 11111);

try {
	$server->run();
}
catch (\Exception $e) {
	$server->stdout($e->getMessage());
}

Ich denke, hier in der connected-Methode wird der Hinweis für mich sein - doch für alle Chatversionen, die ich finde, wurden keine Cookies verwendet - ich dachte, hier sollte vielleicht der user in den users-Array eingefügt werden, doch das geschieht schon in der connect-Methode der abstrakten Klasse.

Den AbstractWebSocketServer habe ich von ghedipunk übernommen, zu AbstractWebSocketServer umbenannt und um die folgende Funktion erweitert:

protected function sendToAllConnectedUsers($msg) {
	foreach($this->users as $user) {
		send($user, $msg);
	}
}

Die client.html:

<html>
<head>
<title>WebSocket</title>
<style type="text/css">
html, body {
	font: normal 0.9em arial, helvetica;
}

#log {
	width: 600px;
	height: 300px;
	border: 1px solid #7F9DB9;
	overflow: auto;
}

#msg {
	width: 400px;
}
</style>
<script src="client.js" type="text/javascript"></script>
</head>
<body onload="init()">
	<h3>WebSocket v2.00</h3>
	<div id="log"></div>
	<input id="username" type="text" />
	<input id="msg" type="text" onkeypress="onkey(event)" />
	<button onclick="send()">Send</button>
	<button onclick="quit()">Quit</button>
	<button onclick="reconnect()">Reconnect</button>
</body>
</html>

und die client.js:

var socket;

function init() {
	var host = "ws://127.0.0.1:11111/WSS.php"; 
	try {
		socket = new WebSocket(host);
		log('WebSocket - status ' + socket.readyState);
		socket.onopen = function(msg) {
			log("Welcome - status " + this.readyState);
		};
		socket.onmessage = function(msg) {
			log("Empfangen: " + msg.data);
		};
		socket.onclose = function(msg) {
			log("Disconnected - status " + this.readyState);
		};
	} catch (ex) {
		log(ex);
	}
	$("msg").focus();
}
function send() {
	var txt, msg, name;
	name = $("username").value;
	txt = $("msg");
	msg = txt.value;
	
	if (!msg) {
		alert("Gib ne Nachricht ein.");
		return;
	}
	txt.value = "";
	txt.focus();
	try {
		socket.send(name + ": " +msg);
		log('Gesendet: ' + msg);
	} catch (ex) {
		log(ex);
	}
}
function quit() {
	if (socket != null) {
		log("Goodbye!");
		socket.close();
		socket = null;
	}
}
function reconnect() {
	quit();
	init();
}
// Utilities
function $(id) {
	return document.getElementById(id);
}
function log(msg) {
	$("log").innerHTML += "<br>" + msg;
}
function onkey(event) {
	if (event.keyCode == 13) {
		send();
	}
}

Wenn ich mich jetzt mit zwei verschiedenen Browsern auf die index.php begebe (die nur die client.html includet), sendet (und empfängt) der WebsocketServer nur im eigenen Browser, nicht im anderen. Was habe ich übersehen? Ich wälz das schon nen ganzen Moment und alle google-Suche führt nicht zum gewünschten Ergebnis. Es wird wohl was ganz dummes sein müssen, also seid bitte gnädig :) 

Danke im Voraus und lieben Gruß,

Martin

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Oha.. das kann weg. Der Server war überhaupt nicht am laufen, da es ne Fehlermeldung gab, weil die $_SERVER-Variable nicht gesetzt war, weils halt als Daemon gestartet wurde.. was ich also gesehen hab, war, wie JavaScript Spass mit der HTML hatte und den Server "simulierte". Wie ich die Fehlermeldung übersehen konnte, ist mir ein Rätsel. 

Ich entschuldige mich fürs Vergeuden eurer Zeit und bitte einen Admin darum, das möglichst schnell zu löschen, da ich nicht denke, dass dieser Faux-Pas irgendwem anders helfen kann. :D

Vielen Dank trotzdem :)

Grüße, Martin

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Nimm an der Diskussion teil

Du kannst jetzt hier posten und Dich später registrieren. Wenn Du bereits über eine Konto verfügst, melde Dich jetzt an, um mit Deinem Konto zu posten.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Melde dich an, um diesem Inhalt zu folgen  

Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung