Skip to content

kcampion/phpws

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 

Repository files navigation

Description

WebSocket Server and Client library for PHP. Works with the latest HyBi specifications, as well the older Hixie #76 specification used by older Chrome versions and some Flash fallback solutions.

This project was started to bring more interactive features to http://www.u2start.com/

Downloads

The current version available for download is 1.0 RC1. This version has been thouroughly tested. However documentation is still minimal.

Features

Server

  • Hixie #76 and Hybi #12 protocol versions
  • Flash client support (also serves XML policy file on the same port)
  • Native Firefox, Safari (iPod / iPhone as well), Chrome and IE10 support. With Flash Client every browser supporting Flash works as well (including IE6-9, Opera, Android and other older desktop browsers).
  • Opera (Mobile) supports WebSockets natively but support has been disabled by default. Can be enabled in opera:config.

Client

  • Hybi / Hixie76 support.

Known Issues

  • SSL support not well field tested.
  • Lacks ORIGIN checking (can be implemented manually in onConnect using getHeaders(), just disconnect the user when you dont like the Origin header)
  • No support for extension data from the HyBi specs.

Requirements

Server

  • PHP 5.3
  • Open port for the server
  • PHP OpenSSL module to run a server over a encrypted connection

Client

  • PHP 5.3
  • Server that implements the HyBi (#8-#12) draft version
  • PHP OpenSSL module to connect using SSL (wss:// uris)

Server Example

	#!/php -q
	<?php

	// Run from command prompt > php demo.php
	require_once("websocket.server.php");

	/**
	 * This demo resource handler will respond to all messages sent to /echo/ on the socketserver below
	 *
	 * All this handler does is echoing the responds to the user
	 * @author Chris
	 *
	 */
	class DemoEchoHandler extends WebSocketUriHandler{
		public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg){
			$this->say("[ECHO] {$msg->getData()}");
			// Echo
			$user->sendMessage($msg);
		}

		public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $obj){
			$this->say("[DEMO] Admin TEST received!");

			$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
			$user->sendFrame($frame);
		}
	}

	/**
	 * Demo socket server. Implements the basic eventlisteners and attaches a resource handler for /echo/ urls.
	 *
	 *
	 * @author Chris
	 *
	 */
	class DemoSocketServer implements IWebSocketServerObserver{
		protected $debug = true;
		protected $server;

		public function __construct(){
			$this->server = new WebSocketServer('tcp://0.0.0.0:12345', 'superdupersecretkey');
			$this->server->addObserver($this);

			$this->server->addUriHandler("echo", new DemoEchoHandler());
		}

		public function onConnect(IWebSocketConnection $user){
			$this->say("[DEMO] {$user->getId()} connected");
		}

		public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg){
			$this->say("[DEMO] {$user->getId()} says '{$msg->getData()}'");
		}

		public function onDisconnect(IWebSocketConnection $user){
			$this->say("[DEMO] {$user->getId()} disconnected");
		}

		public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $msg){
			$this->say("[DEMO] Admin Message received!");

			$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
			$user->sendFrame($frame);
		}

		public function say($msg){
			echo "$msg \r\n";
		}

		public function run(){
			$this->server->run();
		}
	}

	// Start server
	$server = new DemoSocketServer();
	$server->run();

Client Example

      <?php
	require_once("websocket.client.php");

	$input = "Hello World!";
	$msg = WebSocketMessage::create($input);

	$client = new WebSocket("ws://127.0.0.1:12345/echo/");
	if($client->open() === true) {
		$client->sendMessage($msg);

		// Wait for an incoming message
		$msg = $client->readMessage();

		$client->close();

		echo $msg->getData(); // Prints "Hello World!" when using the demo.php server
	}
       ?>

About

PHP Web Socket server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%