Abel'Blog

我干了什么?究竟拿了时间换了什么?

0%

Erlang学习

在游戏开发中,有些服务器就是通过Erlang来编写的。写一篇文章来分析服务器。

概述

Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability. Some of its uses are in telecoms, banking, e-commerce, computer telephony and instant messaging. Erlang’s runtime system has built-in support for concurrency, distribution and fault tolerance.

OTP is set of Erlang libraries and design principles providing middle-ware to develop these systems. It includes its own distributed database, applications to interface towards other languages, debugging and release handling tools.

大体结构

1
2
3
4
5
6
7
8
9
10
11
-inc
-src
|
-adm
-cluster
-db # 数据库函数封装
-eflame
-gm
-tools
|
-emysql # mysql连接池实现

脚注

put/get语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
这段代码是一个 Erlang 监听器处理连接请求的函数,其具体含义如下:

参数:传入的连接请求 ID(1199),连接上下文对象 (#conn{}),以及客户端的 Account 和 Pid 对象 (这里 Pid 是一个进程 ID)。

处理函数逻辑:

计算当前时间 Now=date:unixtime()。
检查连接上下文对象中保存的最后心跳时间 get(last_heartbeat) 是否为 undefined,如果是则返回 0 表示没有心跳信息。
如果 get(last_heartbeat) 不为 undefined,则计算 Diff=Last+?HEARTBEAT_PERIOD-Now,其中 Last 是之前保存的最后心跳时间,?HEARTBEAT_PERIOD 是设定的心跳周期。
将 get(last_heartbeat) 更新为 Now,表示当前时间已经是心跳时间。
返回处理结果,可以根据不同的结果进行不同的处理。
put 和 get 是 Erlang 中的操作符,用于更新或获取一个命名空间中的值。put 操作符用于更新命名空间中的值,get 操作符用于获取命名空间中的值。在此处,put(last_heartbeat, Now) 用于将命名空间中的 last_heartbeat 值更新为 Now,表示当前时间已经是心跳时间。get(last_heartbeat) 用于获取命名空间中的 last_heartbeat 值,并将其返回。

关于 put 和 get 的操作符的资料,可以参考 Erlang 官方文档中的命名空间操作章节,或者参考其他 Erlang 编程书籍或资料。

语法帮助

Elixir-脚本扩展

Erlang 之后发明的脚本语言是 “Elixir”。Elixir 是一种函数式编程语言,它运行在 Erlang 虚拟机(BEAM)上,继承了 Erlang 的并发和容错特性,并添加了更多现代编程语言的功能,如宏和扩展的元编程能力。

引用