Skip to content

基于libev,one loop per thread,支持websocket协议,多个客户端通过服务器通信

Notifications You must be signed in to change notification settings

jishipu/penelope

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

##penelope

###简介 多个html5 web socket客户端可以通过penelope通信。

基于libev开发,one loop per thread。

主进程启动时,初始化四个子线程,主进程启动loop循环, 四个子线程各启动自身的loop循环。

主进程负责监听客户端连接请求,客户端请求到达时,主进程将请求随机分配给某一子线程,

子线程负责和客户端的请求交互。

###数据结构关系

默认接收最大套接字描述符是40960. 每一个套接字描述符(对应某个客户端)指向结构:

struct fd_item {
    int		logid;         //用户本次登录唯一标志符
	int		uid;
	int		roomid;
	int     connected;     //fd目前是否处于连接状态
	enum status_fd status; //fd是否可用
};

roomid对应该客户端所在的房间号,多个客户端可以加入一个房间,在同一个房间中的客户端发

的消息可以让同房间其它人接收到。房间对应的数据结构:

typedef struct hash_player R_ITEM;
struct hash_player{
    int    	fd;
	R_ITEM *next;
};
struct hash_room{
	R_ITEM	*first;
	R_ITEM	*last;
	int	current_count;
};
typedef struct hash_room ROOM;

每个服务器上可以包含多个房间:

struct hash_server
{
    unsigned int room_size;
	ROOM *the_rooms;
};
typedef struct hash_server *SERVER;

用户:

typedef struct user USER_ITEM;
struct user{
    int    	logid; 
	int		fd;
	int		roomid;
	USER_ITEM *next;
};
struct hash_user{
	USER_ITEM *first;
	USER_ITEM *last;
};
typedef struct hash_user USERS;
struct user_array
{
	unsigned int array_size;
	unsigned int user_count;
	USERS *user_array;
};
typedef struct user_array *USER_ARRAY;

程序启动时,默认建立10000个房间,初始化40个用户组。用户连接上服务端选择房间后,根据

传递的logid,roomid将用户归入相应的用户组和房间。用户发送信息时,程序会将信息传递给同

一个房间的其它在线用户,这样就可以通信了。

用户退出或断开连接时,做好相应的清理操作。

About

基于libev,one loop per thread,支持websocket协议,多个客户端通过服务器通信

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published