最近在读大神云风的开源服务器架构skynet,其中的网络库,云风已经单独开来,可以独立使用。

开源地址:

https://github.com/cloudwu/socket-server

网络库已经封装了socket的epoll.

在下载起来的世里面,已经包含了一个例子,但觉得不够明了。于是自己写了个测试例子,分为服务端了客户端,服务端启动并监听端口,客户端启动并连接服务器,向服务器发送消息,并得到服务器的反馈。

服务端代码:

#include "socket_server.h"

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h> static void *
_poll(void * ud) {
struct socket_server *ss = ud;
struct socket_message result;
for (;;) {
int type = socket_server_poll(ss, &result, NULL);
// DO NOT use any ctrl command (socket_server_close , etc. ) in this thread.
switch (type) {
case SOCKET_EXIT:
return NULL;
case SOCKET_DATA:
printf("message(%lu) [id=%d] size=%d %s\n",result.opaque,result.id, result.ud, result.data);
// free(result.data);
socket_server_send(ss, result.id, result.data, result.ud) ;
break;
case SOCKET_CLOSE:
printf("close(%lu) [id=%d]\n",result.opaque,result.id);
break;
case SOCKET_OPEN:
printf("open(%lu) [id=%d] %s\n",result.opaque,result.id,result.data);
break;
case SOCKET_ERROR:
printf("error(%lu) [id=%d]\n",result.opaque,result.id);
break;
case SOCKET_ACCEPT:
printf("accept(%lu) [id=%d %s] from [%d]\n",result.opaque, result.ud, result.data, result.id);
socket_server_start(ss,,result.ud);
break;
}
}
} static void
test(struct socket_server *ss) {
pthread_t pid;
pthread_create(&pid, NULL, _poll, ss); // int c = socket_server_connect(ss,100,"127.0.0.1",80);
// printf("connecting %d\n",c);
int l = socket_server_listen(ss,,"127.0.0.1",,);
printf("listening %d\n",l);
socket_server_start(ss,,l);
// int b = socket_server_bind(ss,300,1);
// printf("binding stdin %d\n",b);
// int i;
// for (i=0;i<100;i++) {
// socket_server_connect(ss, 400+i, "127.0.0.1", 8888);
// }
// sleep(5);
// socket_server_exit(ss); pthread_join(pid, NULL);
} int
main() {
struct sigaction sa;
sa.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &sa, ); struct socket_server * ss = socket_server_create();
test(ss);
// socket_server_release(ss); return ;
}

客户端代码:

#include "socket_server.h"

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <string.h> static void *
_poll(void * ud) {
struct socket_server *ss = ud;
struct socket_message result;
for (;;) {
int type = socket_server_poll(ss, &result, NULL);
// DO NOT use any ctrl command (socket_server_close , etc. ) in this thread.
switch (type) {
case SOCKET_EXIT:
return NULL;
case SOCKET_DATA:
printf("message(%lu) [id=%d] size=%d %s\n",result.opaque,result.id, result.ud, result.data);
free(result.data);
break;
case SOCKET_CLOSE:
printf("close(%lu) [id=%d]\n",result.opaque,result.id);
break;
case SOCKET_OPEN:
printf("open(%lu) [id=%d] %s\n",result.opaque,result.id,result.data);
break;
case SOCKET_ERROR:
printf("error(%lu) [id=%d]\n",result.opaque,result.id);
break;
case SOCKET_ACCEPT:
printf("accept(%lu) [id=%d %s] from [%d]\n",result.opaque, result.ud, result.data, result.id);
break;
}
}
} int
main() {
struct sigaction sa;
sa.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &sa, ); struct socket_server * ss = socket_server_create();
pthread_t pid;
pthread_create(&pid, NULL, _poll, ss); int c = socket_server_connect(ss,,"127.0.0.1",);
printf("connecting %d\n",c);
char buff[];
while(fgets(buff, sizeof(buff), stdin) != NULL)
{
buff[strlen(buff)-] = '\n';
char* sendBuf = malloc(strlen(buff) + );
memcpy(sendBuf, buff, strlen(buff));
socket_server_send(ss, c, sendBuf, strlen(sendBuf));
} pthread_join(pid, NULL);
socket_server_release(ss); return ;
}

skynet网络库socket-server的更多相关文章

  1. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  2. go网络库cellent实现socket聊天功能

    一 .介绍 cellnet是一个组件化.高扩展性.高性能的开源服务器网络库 git地址:https://github.com/davyxu/cellnet 主要使用领域: 游戏服务器 方便定制私有协议 ...

  3. 使用NewLife网络库构建可靠的自动售货机Socket服务端(一)

    最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客 ...

  4. 跨平台高效率Lua网络库 ( 同步形式的API ,底层是异步非阻塞)

    Joynet 项目地址:https://github.com/IronsDu/Joynet 介绍 high performance network library for lua, based on  ...

  5. poco网络库分析,教你如何学习使用开源库

    Poco::Net库中有 FTPClient HTML HTTP HTTPClient HTTPServer ICMP Logging Mail Messages NetCore NTP OAuth ...

  6. boost.ASIO-可能是下一代C++标准的网络库

    曾几何时,Boost中有一个Socket库,但后来没有了下文,C++社区一直在翘首盼望一个标准网络库的出现,网络上开源的网络库也有不少,例如Apache Portable Runtime就是比较著名的 ...

  7. 公布一个基于 Reactor 模式的 C++ 网络库

    公布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...

  8. python --- 网络编程Socket

    网络编程 定义:所为网络编程即是对信息的发送和接收. 主要工作: (1)发送端:将信息以规定的协议组装成数据包. (2)接收端:对收到的数据包解析,以提取所需要的信息. Socket:两个在网络上的程 ...

  9. 轻量级网络库libevent概况

    Libevent is a library for writing fast portable nonblocking IO. libevent是一个为编写快速可移植的非阻塞IO程序而设计的. lib ...

随机推荐

  1. java向文件写数据的3种方式

    下边列举出了三种向文件中写入数据的方式,当然还有其他方式,帮助自己理解文件写入类的继承关系.类的关系: file->fileoutputstream->outputstreamWriter ...

  2. android视频播放

    视频播放我们用到的是MediaPlayer,显示控件使用的surfaceView 我们向SD卡中先添加个视频文件,我的是xajh.3gp,不要用mp4,MP4会出现 should have subti ...

  3. java基于xml配置的通用excel单表数据导入组件(二、xml配置文件解析加载)

    1.BN_ImportExcel.java 对应xml主节点属性 package XXXXX.manage.importexcel; import java.io.Serializable; impo ...

  4. Android Loader详解一:概述

    装载器从android3.0开始引进.它使得在activity或fragment中异步加载数据变得简单.装载器具有如下特性: 它们对每个Activity和Fragment都有效. 他们提供了异步加载数 ...

  5. Action中取得request,session的四种方式

    Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...

  6. "The Same Game": A Simple Game from Start to Finish

    文档视图结构 文档/视图体系结构是一个神奇的架构,通过这个架构,我们可以分离应用程序的数据和显示.文档包含了全部的数据,视图从文档获取数据并且显示给用户.针对这个游戏例子,我们得数据是游戏板和有颜色的 ...

  7. vss搭建于操作

    1.下载的vvs2005,下载后先安装在服务器上,反正就是下一步下一步就对了 安装完成后,打开miscrosoft visual sourcesafe,---create  connection da ...

  8. 大众点评的大数据实践-CSDN.NET

    大众点评的大数据实践-CSDN.NET 大众点评的大数据实践 爬虫工程师成大数据时代的"宠儿" - 杭州新闻中心 - 杭州网 爬虫工程师成大数据时代的"宠儿"

  9. Yii框架常见问题汇总

    然用过Yii做了一个小项目了,但是过程中间解决的问题没有随手记下来,导致新项目开始后,以前碰到的问题还得在查一遍,干脆就记下来,以便不时之需. 有新的会随时更新. 1.如何显示ActiveRecord ...

  10. QinQ封装及终结详解

    以下内容摘自正在当当网.京东网.卓越网.互动出版网预售,即将正式发售的<华为交换机学习指南>一书(全书近千页).本书是由华为官方授权,国内第一本,也是唯一一本华为交换机权威学习指南,是华为 ...