本人大三出来找实习单位,本来是学嵌入式的,但对C++比较感兴趣,所以打算找一份C++相关的工作,参加了几个面试,也拿了好几份offer,有两家公司我是比较中意的,一家是C++音视频(大公司),另一家是C++游戏公司(游戏公司),最终在金钱的诱惑面前我去了小公司。
小公司进去的时候,主管让我学一门语言,叫erlang,以前听都没有听过的语言,然后给我一本erlang程序设计书,是中文版的还不错,由于我是学嵌入式的,对linux操作系统比较熟悉,所有让我安装这些软件配置这些我半天就完成,本人C语言还是不错了,做过比较多得项目,都是兴趣项目,所以erlang我还是学得比较快。
差不多但四天的时间,我把erlang那本书学完了,了解了基本的语法和数据结构这些。第二周,我们后端的主管,也就是招我进去的那个人给了我一个小练习,让我做一个聊天室,需求如下:
用erlang实现一个多人聊天室
%% 基于tcp协议,客户端服务端都用erlang实现
%% 客户端调用client:connect可以连接服务器
%% :create_channel可以创建频道
%% :list_channel可以列出频道
%% :join_channel可以加入特定频道
%% :quick_channl可以退出当前频道
%% :talk可以在频道内讲话
%% :user可以列出频道内的用户
%% 提示:命令都在终端采用函数调用,输出都打印到终端
因为我以前也用c语言做过关于服务器的小项目,据我现在了解到的,服务器与客户端的关系差不多就是请求和给出相应的响应,所以我差不多花了一天半的时间,不过给大佬验收的时候出了点小bug,是套接字阻塞和当前进程终端输出问题,当初找出bug给大佬解释了一番(大佬满意的点点头,嘿嘿),下面就是完整的代码。
sever1
%%%-------------------------------------------------------------------
%%% @author 94217
%%% @copyright (C) 2018, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 13. 十一月 2018 15:32
%%%-------------------------------------------------------------------
-module(sever1).
-author("94217").
-export([start/0,
create_chanel/2,
loop/1]).
% 启动一个服务器
start() ->
%创建一个全局的ets表,存放频道名和频道内的用户
ets:new(channel, [bag, public, named_table, {write_concurrency, true}, {read_concurrency, true}]),
case gen_tcp:listen(6789,[binary,{packet,4},{reuseaddr,true},{active,true}]) of
{ok,Listen} ->