• Stars
    star
    2,284
  • Rank 20,164 (Top 0.4 %)
  • Language
    PHP
  • Created over 9 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

phpsocket.io

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

Notice

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

Install

composer require workerman/phpsocket.io

Examples

Simple chat

start.php

use Workerman\Worker;
use PHPSocketIO\SocketIO;
require_once __DIR__ . '/vendor/autoload.php';

// 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();

Another chat demo

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

use Workerman\Worker;
use PHPSocketIO\SocketIO;
require_once __DIR__ . '/vendor/autoload.php';

// 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();

Enable SSL for https

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

start.php

<?php

use Workerman\Worker;
use PHPSocketIO\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 = new SocketIO(2021, $context);

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

Worker::runAll();

Acknowledgement callback

use Workerman\Worker;
use PHPSocketIO\SocketIO;

require_once __DIR__ . '/vendor/autoload.php';

$io = new SocketIO(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();

手册

中文手册

Livedemo

chat demo

Run chat example

cd examples/chat

Start

php start.php start for debug mode

php start.php start -d for daemon mode

Stop

php start.php stop

Status

php start.php status

License

MIT

More Repositories

1

workerman

An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols.
PHP
11,067
star
2

webman

Probably the fastest PHP web framework in the world.
PHP
2,126
star
3

workerman-todpole

HTML5+WebSocket+PHP(Workerman) , rumpetroll server writen using php
PHP
1,844
star
4

workerman-chat

Websocket chat room written in PHP based on workerman.
PHP
1,185
star
5

GatewayWorker

Distributed realtime messaging framework based on workerman.
PHP
1,007
star
6

web-msg-sender

Web message pusher written in PHP based on workerman.
PHP
922
star
7

live-camera

Live camera based on HTML5+Canvas+Websocket+PHP (Workerman).
PHP
458
star
8

BrowserQuest-PHP

BrowserQuest server in PHP base on workerman. A PHP/HTML5/JavaScript multiplayer game experiment.
PHP
376
star
9

workerman-statistics

一个分布式统计监控系统 包含PHP客户端 、服务端
PHP
350
star
10

GatewayClient

Sdk For GatewayWorker
PHP
334
star
11

workerman-thrift

Thrift RPC for php based on workerman.
PHP
274
star
12

workerman-jsonrpc

workerman作为进程管理器,json作为协议的远程服务调用的框架
PHP
251
star
13

workerman-webrtc

php webrtc demo based on workerman
JavaScript
251
star
14

live-ascii-camera

利用HTML5将摄像头视频转换为ascii字符,通过websocket实时传输给其它页面。服务端使用workerman
PHP
215
star
15

php-socks5

socks5 proxy written in PHP based on workerman.
PHP
208
star
16

mqtt

Asynchronous MQTT client for PHP based on workerman.
PHP
203
star
17

php-http-proxy

HTTP proxy written in PHP based on workerman.
PHP
201
star
18

phptty

Share your terminal as a web application. PHP terminal emulator based on workerman.
PHP
173
star
19

workerman-vmstat

在浏览器里面显示以更友好的方式实时显示vmstats信息,包括内存、IO、cpu等信息
PHP
160
star
20

channel

Interprocess communication component for workerman
PHP
136
star
21

workerman-flappy-bird

flappy bird 多人在线版
PHP
119
star
22

webman-framework

webman-framework
PHP
116
star
23

workerman-for-win

workerman 3.x windows 版本(目前linux版本已经兼容windows,此版本不再维护)
PHP
109
star
24

workerman-queue

workerman 消息队列
PHP
107
star
25

GlobalData

进程间变量共享组件,用于分布式数据共享
PHP
73
star
26

workerman-todpole-web

小蝌蚪互动聊天室-适合虚拟空间使用(后端直接与workerman主机通讯。请保留页面上workerman的相关链接)
JavaScript
73
star
27

workerman-filemonitor

监控文件更新并自动reload workerman
PHP
67
star
28

workerman-manual

Workerman manual
PHP
65
star
29

crontab

A crontab written in PHP based on workerman
PHP
60
star
30

mysql

Long-living MySQL connection for daemon.
PHP
55
star
31

workerman-chat-for-win

workerman-chat windows版本
PHP
48
star
32

http-client

Asynchronous http client for PHP based on workerman.
PHP
47
star
33

rabbitmq

Asynchronous rabbitmq client for PHP based on workerman.
PHP
35
star
34

redis-queue

Message queue system written in PHP based on workerman and backed by Redis.
PHP
35
star
35

workerman-todpole-for-win

workerman-todpole-for-win
PHP
25
star
36

workerman.net

workerman.net主页源代码
PHP
25
star
37

phpsocket.io-emitter

PHP
23
star
38

workerman-MT

workerman多线程版本,同时支持Linux平台与Windows平台,接口与原Linux多进程版本兼容
PHP
22
star
39

redis

Asynchronous redis client for PHP based on workerman.
PHP
18
star
40

workerman-filemonitor-inotify

workerman文件监控并自动reload inotify版本
PHP
17
star
41

workerman-manual-zh

workerman中文手册
17
star
42

web-msg-sender-for-win

web-msg-sender for win
PHP
17
star
43

GatewayWorker-for-win

GatewayWorker for windows.
PHP
16
star
44

global-timer

Distributed timer for workerman.
PHP
15
star
45

phpsocket.io-for-win

PHP
12
star
46

webserver-example

PHP
10
star
47

stomp

Asynchronous Stomp client for PHP based on workerman.
PHP
8
star
48

tcp-proxy-demo

一个tcp代理服务器的demo
PHP
8
star
49

en.workerman.net

en.workerman.net
PHP
4
star
50

workerman-teach

PHP
4
star
51

gateway-doc

GatewayWorker manual
3
star