Skip to content

Commit cf46e47

Browse files
committedNov 26, 2013
Updated README.md
1 parent 4c94ef5 commit cf46e47

File tree

2 files changed

+53
-85
lines changed

2 files changed

+53
-85
lines changed
 

‎README.md

+53-84
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ Client
2424

2525
Known Issues
2626
-------------
27-
* SSL support not well field tested.
2827
* Lacks ORIGIN checking (can be implemented manually in onConnect using getHeaders(), just disconnect the user when you dont like the Origin header)
2928
* No support for extension data from the HyBi specs.
3029

@@ -35,6 +34,12 @@ Requirements
3534
* Open port for the server
3635
* PHP OpenSSL module to run a server over a encrypted connection
3736

37+
* Composer dependencies *
38+
These will be installed automatically when using phpws as a composer package.
39+
40+
* Reactphp
41+
* ZF2 Logger
42+
3843
*Client*
3944
* PHP 5.3
4045
* Server that implements the HyBi (#8-#12) draft version
@@ -43,97 +48,61 @@ Requirements
4348
Server Example
4449
---------------
4550
```php
46-
#!/php -q
47-
<?php
48-
49-
// Run from command prompt > php demo.php
50-
51-
/**
52-
* This demo resource handler will respond to all messages sent to /echo/ on the socketserver below
53-
*
54-
* All this handler does is echoing the responds to the user
55-
* @author Chris
56-
*
57-
*/
58-
class DemoEchoHandler extends WebSocketUriHandler{
59-
public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg){
60-
echo "[ECHO] {$msg->getData()}\n";
61-
// Echo
62-
$user->sendMessage($msg);
63-
}
64-
65-
public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $obj){
66-
echo "[DEMO] Admin TEST received!\n";
67-
68-
$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
69-
$user->sendFrame($frame);
70-
}
71-
}
72-
73-
/**
74-
* Demo socket server. Implements the basic eventlisteners and attaches a resource handler for /echo/ urls.
75-
*
76-
*
77-
* @author Chris
78-
*
79-
*/
80-
class DemoSocketServer implements IWebSocketServerObserver{
81-
protected $debug = true;
82-
protected $server;
83-
84-
public function __construct(){
85-
$this->server = new WebSocketServer('tcp://0.0.0.0:12345', 'superdupersecretkey');
86-
$this->server->addObserver($this);
87-
88-
$this->server->addUriHandler("echo", new DemoEchoHandler());
89-
}
90-
91-
public function onConnect(IWebSocketConnection $user){
92-
echo "[DEMO] {$user->getId()} connected\n";
93-
}
94-
95-
public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg){
96-
echo "[DEMO] {$user->getId()} says '{$msg->getData()}'\n";
97-
}
98-
99-
public function onDisconnect(IWebSocketConnection $user){
100-
echo "[DEMO] {$user->getId()} disconnected\n";
101-
}
102-
103-
public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $msg){
104-
echo "[DEMO] Admin Message received!\n";
105-
106-
$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
107-
$user->sendFrame($frame);
108-
}
109-
110-
public function run(){
111-
$this->server->run();
112-
}
113-
}
114-
115-
// Start server
116-
$server = new DemoSocketServer();
117-
$server->run();
51+
require_once("vendor/autoload.php"); // Composer autoloader
52+
53+
use Devristo\Phpws\Messaging\WebSocketMessageInterface;
54+
use Devristo\Phpws\Protocol\WebSocketConnectionInterface;
55+
use Devristo\Phpws\Server\WebSocketServer;
56+
57+
$loop = \React\EventLoop\Factory::create();
58+
59+
// Create a logger which writes everything to the STDOUT
60+
$logger = new \Zend\Log\Logger();
61+
$writer = new Zend\Log\Writer\Stream("php://output");
62+
$logger->addWriter($writer);
63+
64+
// Create a WebSocket server using SSL
65+
$server = new WebSocketServer("tcp://0.0.0.0:12345", $loop, $logger);
66+
67+
$server->on("connect", function(WebSocketConnectionInterface $user){
68+
$user->sendString("Hey! I am the echo robot. I will repeat all your input!");
69+
});
70+
71+
$server->on("message", function(WebSocketConnectionInterface $user, WebSocketMessageInterface $message) use($logger){
72+
$logger->notice(sprintf("We have got '%s' from client %s", $message->getData(), $user->getId()));
73+
$user->sendString($message->getData());
74+
});
75+
76+
// Bind the server
77+
$server->bind();
78+
79+
// Start the event loop
80+
$loop->run();
11881
```
11982

12083
Client Example
12184
---------------------
12285
```php
123-
<?php
86+
require_once("vendor/autoload.php"); // Composer autoloader
87+
88+
$loop = \React\EventLoop\Factory::create();
12489

125-
$input = "Hello World!";
126-
$msg = WebSocketMessage::create($input);
90+
$logger = new \Zend\Log\Logger();
91+
$writer = new Zend\Log\Writer\Stream("php://output");
92+
$logger->addWriter($writer);
12793

128-
$client = new WebSocket("ws://127.0.0.1:12345/echo/");
129-
$client->open();
130-
$client->sendMessage($msg);
94+
$client = new \Devristo\Phpws\Client\WebSocket("ws://echo.websocket.org/?encoding=text", $loop, $logger);
95+
$client->on("connected", function($headers) use ($logger, $client){
96+
$logger->notice("Connected!");
97+
$client->send("Hello world!");
98+
});
13199

132-
// Wait for an incoming message
133-
$msg = $client->readMessage();
100+
$client->on("message", function($message) use ($client, $logger){
101+
$logger->notice("Got message: ".$message->getData());
102+
$client->close();
103+
});
134104

135-
$client->close();
136105

137-
echo $msg->getData(); // Prints "Hello World!" when using the demo.php server
138-
?>
106+
$client->open();
107+
$loop->run();
139108
```

‎examples/echo_client.php

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
$loop = \React\EventLoop\Factory::create();
1212

13-
1413
$logger = new \Zend\Log\Logger();
1514
$writer = new Zend\Log\Writer\Stream("php://output");
1615
$logger->addWriter($writer);

0 commit comments

Comments
 (0)
Please sign in to comment.