随笔分类 - 后端开发
摘要:select 的优点:大多数操作系统都支持 epoll 优点:内部的 epoll 空间是由红黑树构成,而 select 与 poll 都是线性表,发生事件时不需要遍历所有文件描述符,可以直接找到发生事件的集合 typedef union epoll_data { void *ptr; int fd;
阅读全文
摘要:TCP/IP网络编程 -- (十二)I/O复用 如果为了并发使用多进程服务器,代价很大。因为创建进程需要大量的运算和内存空间,并且相互之间的数据交换也要用管道这种相对复杂的方法 复用技术在服务器端的应用 12.2理解select并实现服务器端 select 可以将多个文件描述符集中到一起监视 要把
阅读全文
摘要:TCP/IP网络编程 -- (十一)进程间通信 进程间通信基本概念 因为两个进程间具有完全独立的内存空间,因此通信需要特殊的方式 通过管道实现进程间通信 管道并非进程的资源,与 socket 类似是操作系统的资源(也就不是 fork 的复制对象),两个进程通过操作系统提供的内存空间通信 #inclu
阅读全文
摘要:TCP/IP网络编程 -- (十)多进程服务器端 10.1进程概念及应用 为了提高客户端的平均满意度,通常会使用并发服务器的方法,并且网络程序中数据通信时间比 CPU 运算时间大,因此向多个客户端提供服务是一种有效利用 CPU 的方式 主要有三种方法: 多进程服务器:通过创建多个进程提供服务 多路复
阅读全文
摘要:TCP/IP网络编程 -- (九)套接字的多种可选项 之前写的程序都是创建好 socket 后未经特殊设置直接使用,但有时需要更改 getsockopt & setsocket 可以对上述的可选项进行读取和设置操作(有些只能进行一种操作) 读取和设置根据以下两个函数完成 #include <sys/
阅读全文
摘要:TCP/IP网络编程 -- (八)域名及网络地址 8.2IP地址与域名之间的转换 由于网站的域名基本不会变更,而IP会频繁变动,因此程序员应利用域名编写程序,每次运行时程序根据域名获取IP,再接入服务器,这样程序就不会依赖于服务器的IP了,因此程序中也需要IP与域名转换的函数。 #include <
阅读全文
摘要:TCP/IP网络编程 -- (七)优雅地断开套接字连接 7.1基于TCP的半关闭 Linux 中的 close 与 Windows 中的 closesocket 函数都是完全断开连接。此时既无法发送也不能接受数据 更多情况下需要半关闭,可以传输不能接受,或可以接受不能传输 close 会同时断开这两
阅读全文
摘要:TCP/IP网络编程 -- (五)基于 TCP 的服务端/客户端(2) 5.1回声服务器的完美实现 由于上一章末尾提到的问题 write(sock, message, strlen(message)); str_len = read(sock, message, BUF_SIZE - 1); mes
阅读全文
摘要:TCP/IP网络编程 -- (四)基于 TCP 的服务端/客户端(1) 4.2实现基于 CP 的服务器端/客户端 等待连接请求阶段 #include <sys/socket.h> int listen(int sock, int backlog); 成功返回 0,失败返回 -1 sock :希望进入
阅读全文
摘要:目前在学习 gin 框架,但是在无图形化界面的 linux 云服务器上看不到网页的效果,而且 lynx 等纯文本浏览器过于丑陋了。于是研究了一下如何在本地计算机访问云服务器上的 127.0.0.1(感谢 new bing) 首先简单写了抄了个 go 语言编写的 http服务器,在 127.0.0.1
阅读全文
摘要:实现了客户端的菜单功能,分为 公聊模式 私聊模式 更新用户名 退出 并实现了这四个功能,本次的简易即时聊天系统到此结束 公聊模式 func (client *Client) PublicChat() { //发给服务器 for { var chatMsg string fmt.Println(">>
阅读全文
摘要:本次实现了客户端与服务器的连接,不过客户端仍是终端下的,不是UI(水平太低了) 并且实现命令行解析 ./client -ip 17.0.0.1 -port 8888 可把命令行中的参数传递进去 package main import ( "flag" "fmt" "net" ) type Clien
阅读全文
摘要:可以把用户的上线,下线,处理业务放到 user.go 中,但是好像会有传递依赖的问题,作为初学者就忽略了。。。 其余功能只需稍微添加代码,难度较低 package main import ( "net" "strings" ) type User struct { Name string Addr
阅读全文
摘要:在处理业务的 Handler(conn net.Conn) 方法中加入可以从当前 conn 中读取消息并广播的功能 go func() { buf := make([]byte, 4096) for { n, err := conn.Read(buf) if n == 0 { this.BroadC
阅读全文
摘要:V0.1实现了server的基础构建,并在main.go中测试了连接成功 V0.2要实现用户上线功能,并且某用户上线时所有在线用户都会收到该用户的上线信息,即蓝线功能 实现用户上线功能,先定义一个用户结构体 type User struct { Name string Addr string C c
阅读全文
摘要:跟着b站上刘丹冰Aceld大佬开始做go项目 创建server结构体,要有server的Ip和Port两个变量 type Server struct { Ip string Port int } 创建一个server的接口 func NewServer(ip string, port int) *S
阅读全文
摘要:之前在win和mac上都配了一次,这次在linux配,属于是都练了一遍 安装go 下载linux版本安装包wget https://studygolang.com/dl/golang/go1.20.1.linux-amd64.tar.gz 解压安装包到 /usr/local/src(用户级的程序都可
阅读全文
摘要:刚学完go的语法,本来想着找个小项目试试手,发现大佬们都是vscode ssh到云服务器上做开发的。正好看到阿里云的学生认证后可以白嫖,就先嫖了个试试手 跟着各大教程简单配置了一下阿里云,安装vscode的Romote-ssh插件后配置信息如下: Host可以自己起,就是远程连接的服务器别名 Hos
阅读全文