Be sure to check out the movie game client: https://github.com/softwaredeveloperca/moviegameinvue (vue2 quasar framework)
This is the backend for the movie game. Clone this repo. It uses fast and stable new phpsocket.io please follow the instructions below to get your server started.
I reuse the existing chat example, navigate here:
phpsocket.io/examples/chat/src
type: php start_io.php start
The database is in mysql and can be found in the repo. Be sure to install.
The game itself can be found in: phpsocket.io/src/Models/Game.php
A server side alternative implementation of socket.io in PHP based on Workerman.
Only support socket.io v1.3.0 or greater.
Namespace temporarily not implemented.
This porject is just trasnlate socket.io by workerman.
More api just see http://socket.io/docs/server-api/
composer require workerman/phpsocket.io
use Workerman\Worker;
use PHPSocketIO\SocketIO;
// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
$socket->on('chat message', function($msg)use($io){
$io->emit('chat message', $msg);
});
});
Worker::runAll();
https://github.com/walkor/phpsocket.io/blob/master/examples/chat/server.php
use Workerman\Worker;
use PHPSocketIO\SocketIO;
// listen port 2020 for socket.io client
$io = new SocketIO(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();
(phpsocket.io>=1.1.1 && workerman>=3.3.7 required)
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;
// ssl context
$context = array(
'ssl' => array(
'local_cert' => '/your/path/of/server.pem',
'local_pk' => '/your/path/of/server.key',
)
);
$io = new SocketIO(2021, $context);
$io->on('connection', function($connection)use($io){
echo "new connection coming\n";
});
Worker::runAll();
cd examples/chat
php server.php start
for debug mode
php server.php start -d
for daemon mode
php server.php stop
php server.php status
MIT