Skip to content

A server side alternative implementation of socket.io in PHP based on workerman.

Notifications You must be signed in to change notification settings

walkor/phpsocket.io

Repository files navigation

phpsocket.io

A server side alternative implementation ofsocket.ioin PHP based onWorkerman.

Notice

Only support socket.io >= v1.3.0 and <= v2.x
This project is just translate socket.io byworkerman.
More api just seehttps://socket.io/docs/v2/server-api/

Install

composer require workerman/phpsocket.io

Examples

Simple chat

start.php

useWorkerman\Worker;
usePHPSocketIO\SocketIO;
require_once__DIR__.'/vendor/autoload.php';

// Listen port 2021 for socket.io client
$io=newSocketIO(2021);
$io->on('connection',function($socket)use($io) {
$socket->on('chat message',function($msg)use($io) {
$io->emit('chat message',$msg);
});
});

Worker::runAll();

Another chat demo

https://github /walkor/phpsocket.io/blob/master/examples/chat/start_io.php

useWorkerman\Worker;
usePHPSocketIO\SocketIO;
require_once__DIR__.'/vendor/autoload.php';

// Listen port 2020 for socket.io client
$io=newSocketIO(2020);
$io->on('connection',function($socket) {
$socket->addedUser=false;

// When the client emits 'new message', this listens and executes
$socket->on('new message',function($data)use($socket) {
// We tell the client to execute 'new message'
$socket->broadcast->emit('new message',array(
'username'=>$socket->username,
'message'=>$data
));
});

// When the client emits 'add user', this listens and executes
$socket->on('add user',function($username)use($socket) {
global$usernames,$numUsers;

// We store the username in the socket session for this client
$socket->username=$username;
// Add the client's username to the global list
$usernames[$username] =$username;
++$numUsers;

$socket->addedUser=true;
$socket->emit('login',array(
'numUsers'=>$numUsers
));

// echo globally (all clients) that a person has connected
$socket->broadcast->emit('user joined',array(
'username'=>$socket->username,
'numUsers'=>$numUsers
));
});

// When the client emits 'typing', we broadcast it to others
$socket->on('typing',function()use($socket) {
$socket->broadcast->emit('typing',array(
'username'=>$socket->username
));
});

// When the client emits 'stop typing', we broadcast it to others
$socket->on('stop typing',function()use($socket) {
$socket->broadcast->emit('stop typing',array(
'username'=>$socket->username
));
});

// When the user disconnects, perform this
$socket->on('disconnect',function()use($socket) {
global$usernames,$numUsers;

// Remove the username from global usernames list
if($socket->addedUser) {
unset($usernames[$socket->username]);
--$numUsers;

// echo globally that this client has left
$socket->broadcast->emit('user left',array(
'username'=>$socket->username,
'numUsers'=>$numUsers
));
}
});
});

Worker::runAll();

Enable SSL for https

(phpsocket.io>=1.1.1 && workerman>=3.3.7 required)

start.php

<?php

useWorkerman\Worker;
usePHPSocketIO\SocketIO;

require_once__DIR__.'/vendor/autoload.php';

// SSL context
$context=array(
'ssl'=>array(
'local_cert'=>'/your/path/of/server.pem',
'local_pk'=>'/your/path/of/server.key',
'verify_peer'=>false
)
);
$io=newSocketIO(2021,$context);

$io->on('connection',function($connection)use($io) {
echo"New connection coming\n ";
});

Worker::runAll();

Acknowledgement callback

useWorkerman\Worker;
usePHPSocketIO\SocketIO;

require_once__DIR__.'/vendor/autoload.php';

$io=newSocketIO(2021);

$io->on('connection',function($connection)use($io) {
$socket->on('message with ack',function($data,$callback)use($socket,$io) {
// acknowledgement callback
if($callback&&is_callable($callback)) {
$callback(0);
}
});
});

Worker::runAll();

Sổ tay

Tiếng Trung sổ tay

Livedemo

chat demo

Run chat example

cd examples/chat

Start

php start.php startfor debug mode

php start.php start -dfor daemon mode

Stop

php start.php stop

Status

php start.php status

License

MIT