`
喵喵大神
  • 浏览: 35918 次
文章分类
社区版块
存档分类
最新评论

PhpSms 稳定可靠的php短信发送库

PHP 
阅读更多

可能是目前最聪明、优雅的PHP短信发送库了。从此不再为各种原因造成的个别短信发送失败而烦忧!

phpsms的任务均衡调度功能由toplan/task-balancer提供。

GitHub地址:https://github.com/toplan/phpsms

 

特点

  • 支持发送均衡调度,可按代理器权重值均衡选择服务商发送。
  • 支持语音验证码。
  • 支持一个或多个备用代理器(服务商)。
  • 允许推入队列,并自定义队列实现逻辑(与队列系统松散耦合)。
  • 短信/语音发送前后钩子。
  • 支持国内主流短信服务商
  • 自定义代理器寄生代理器

服务商

服务商 模板短信 内容短信 语音验证码 最低消费 最低消费单价
Luosimao × ¥850(1万条) ¥0.085/条
云片网络 × ¥55(1千条) ¥0.055/条
容联·云通讯 × 充值¥500 ¥0.055/条
SUBMAIL × × ¥100(1千条) ¥0.100/条
云之讯 × -- ¥0.050/条
聚合数据 × -- ¥0.035/条
阿里大鱼 × -- ¥0.045/条
SendCloud × -- ¥0.048/条

安装

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. composer require 'toplan/phpsms:~1.6.0'  

安装开发中版本:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. composer require 'toplan/phpsms:dev-master'  

 

快速上手

1. 配置

  • 配置代理器所需参数

 

为你需要用到的短信服务商(即代理器)配置必要的参数。可以在config\phpsms.php中键为agents的数组中配置,也可以手动在程序中设置,示例如下:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //example:  
  2. Sms::config([  
  3.     'Luosimao' => [  
  4.         //短信API key  
  5.         'apikey' => 'your api key',  
  6.         //语音验证API key  
  7.         'voiceApikey' => 'your voice api key',  
  8.     ],  
  9.     'YunPian'  => [  
  10.         //用户唯一标识,必须  
  11.         'apikey' => 'your api key',  
  12.     ]  
  13. ]);  

 

  • 配置代理器调度方案

可在config\phpsms.php中键为scheme的数组中配置。也可以手动在程序中设置,示例如下:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //example:  
  2. Sms::scheme([  
  3.     //被使用概率为2/3  
  4.     'Luosimao' => '20',  
  5.   
  6.     //被使用概率为1/3,且为备用代理器  
  7.     'YunPian' => '10 backup',  
  8.   
  9.     //仅为备用代理器  
  10.     'YunTongXun' => '0 backup',  
  11. ]);  

 

调度方案解析: 如果按照以上配置,那么系统首次会尝试使用LuosimaoYunPian发送短信,且它们被使用的概率分别为2/31/3。 如果使用其中一个代理器发送失败,那么会启用备用代理器,按照配置可知备用代理器有YunPianYunTongXun,那么会依次调用直到发送成功或无备用代理器可用。 值得注意的是,如果首次尝试的是YunPian,那么备用代理器将会只使用YunTongXun,也就是会排除使用过的代理器。

2. Enjoy it!

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. require('path/to/vendor/autoload.php');  
  2. use Toplan\PhpSms\Sms;  
  3.   
  4. // 接收人手机号  
  5. $to = '1828****349';  
  6. // 短信模版  
  7. $templates = [  
  8.     'YunTongXun' => 'your_temp_id',  
  9.     'SubMail'    => 'your_temp_id'  
  10. ];  
  11. // 模版数据  
  12. $tempData = [  
  13.     'code' => '87392',  
  14.     'minutes' => '5'  
  15. ];  
  16. // 短信内容  
  17. $content = '【签名】这是短信内容...';  
  18.   
  19. // 只希望使用模板方式发送短信,可以不设置content(如:云通讯、Submail、Ucpaas)  
  20. Sms::make()->to($to)->template($templates)->data($tempData)->send();  
  21.   
  22. // 只希望使用内容方式放送,可以不设置模板id和模板data(如:云片、luosimao)  
  23. Sms::make()->to($to)->content($content)->send();  
  24.   
  25. // 同时确保能通过模板和内容方式发送,这样做的好处是,可以兼顾到各种类型服务商  
  26. Sms::make()->to($to)  
  27.     ->template($templates)  
  28.     ->data($tempData)  
  29.     ->content($content)  
  30.     ->send();  
  31.   
  32. // 语音验证码  
  33. Sms::voice('02343')->to($to)->send();  
  34.   
  35. // 语音验证码兼容模版语音(如阿里大鱼的文本转语音)  
  36. Sms::voice('02343')  
  37.     ->template('Alidayu''your_tts_code')  
  38.     ->data(['code' => '02343'])  
  39.     ->to($to)->send();  

3. 在laravel中使用

如果你只想单纯的在laravel中使用phpsms的功能可以按如下步骤操作, 当然也为你准备了基于phpsms开发的laravel-sms

  • 在config/app.php中引入服务提供器
[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //服务提供器  
  2. 'providers' => [  
  3.     ...  
  4.     Toplan\PhpSms\PhpSmsServiceProvider::class,  
  5. ]  
  6.   
  7. //别名  
  8. 'aliases' => [  
  9.     ...  
  10.     'PhpSms' => Toplan\PhpSms\Facades\Sms::class,  
  11. ]  
 
  • 生成配置文件
[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. php artisan vendor:publish  

 

生成的配置文件为config/phpsms.php,然后在该文件中按提示配置。

  • 使用

详见API,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. PhpSms::make()->to($to)->content($content)->send();  

 

API

API - 全局配置

Sms::scheme([$name[, $scheme]])

设置/获取代理器的调度方案。

调度配置在调度系统启动后(创建Sms实例时会自动启动)就不能修改。

  • 设置

手动设置代理器调度方案(优先级高于配置文件),如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::scheme([  
  2.     'Luosimao' => '80 backup'  
  3.     'YunPian' => '100 backup'  
  4. ]);  
  5. //或  
  6. Sms::scheme('Luosimao''80 backup');  
  7. Sms::scheme('YunPian''100 backup');  

 

  • 获取

通过该方法还能获取所有或指定代理器的调度方案,如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //获取所有的调度方案:  
  2. $scheme = Sms::scheme();  
  3.   
  4. //获取指定代理器的调度方案:  
  5. $scheme['Luosimao'] = Sms::scheme('Luosimao');  

 

scheme静态方法的更多使用方法见高级调度配置

Sms::config([$name[, $config][, $override]]);

设置/获取代理器的配置数据。

代理器参数配置在应用系统的整个运行过程中都是能修改的,这点和调度配置有所不同。

  • 设置

手动设置代理器的配置数据(优先级高于配置文件),如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::config([  
  2.    'YunPian' => [  
  3.        'apikey' => ...,  
  4.    ]  
  5. ]);  
  6. //或  
  7. Sms::config('YunPian', [  
  8.    'apikey' => ...,  
  9. ]);  

 

  • 获取

通过该方法还能获取所有或指定代理器的配置参数,如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //获取所有的配置:  
  2. $config = Sms::config();  
  3.   
  4. //获取指定代理器的配置:  
  5. $config['Luosimao'] = Sms::config('Luosimao');  

 

Sms::cleanScheme()

清空所有代理器的调度方案,请谨慎使用该接口。

Sms::cleanConfig()

清空所有代理器的配置数据,请谨慎使用该接口。

Sms::beforeSend($handler[, $override]);

发送前钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::beforeSend(function($task$prev$index$handlers){  
  2.     //获取短信数据  
  3.     $smsData = $task->data;  
  4.     ...  
  5.     //如果返回false会终止发送任务  
  6.     return true;  
  7. });  

 

更多细节请查看task-balancer的“beforeRun”钩子

Sms::beforeAgentSend($handler [, $override]);

代理器发送前钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::beforeAgentSend(function($task$driver$prev$index$handlers){  
  2.     //短信数据:  
  3.     $smsData = $task->data;  
  4.     //当前使用的代理器名称:  
  5.     $agentName = $driver->name;  
  6.     //如果返回false会停止使用当前代理器  
  7.     return true;  
  8. });  

 

更多细节请查看task-balancer的“beforeDriverRun”钩子

Sms::afterAgentSend($handler [, $override]);

代理器发送后钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::afterAgentSend(function($task$result$prev$index$handlers){  
  2.      //$result为代理器的发送结果数据  
  3.      $agentName = $result['driver'];  
  4.      ...  
  5. });  

 

更多细节请查看task-balancer的“afterDriverRun”钩子

Sms::afterSend($handler [, $override]);

发送后钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::afterSend(function($task$result$prev$index$handlers){  
  2.     //$result为发送后获得的结果数组  
  3.     $success = $result['success'];  
  4.     ...  
  5. });  

 

更多细节请查看task-balancer的“afterRun”钩子

Sms::queue($enable, $handler)

该方法可以设置是否启用队列以及定义如何推送到队列。

$handler匿名函数可使用的参数:

  • $sms : Sms实例
  • $data : Sms实例中的短信数据,等同于$sms->getData()

定义如何推送到队列:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //自动启用队列  
  2. Sms::queue(function($sms$data){  
  3.     //define how to push to queue.  
  4.     ...  
  5. });  
  6.   
  7. //第一个参数为true,启用队列  
  8. Sms::queue(true, function($sms$data){  
  9.     //define how to push to queue.  
  10.     ...  
  11. });  
  12.   
  13. //第一个参数为false,暂时关闭队列  
  14. Sms::queue(false, function($sms$data){  
  15.     //define how to push to queue.  
  16.     ...  
  17. });  

 

如果已经定义过如何推送到队列,还可以继续设置关闭/开启队列:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::queue(true);//开启队列  
  2. Sms::queue(false);//关闭队列  

 

获取队列启用情况:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $enable = Sms::queue();  
  2. //为true,表示当前启用了队列。  
  3. //为false,表示当前关闭了队列。  

 

API - 发送相关

Sms::make()

生成发送短信的sms实例,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms = Sms::make();  
  2.   
  3. //创建实例的同时设置短信内容:  
  4. $sms = Sms::make('【签名】这是短信内容...');  
  5.   
  6. //创建实例的同时设置短信模版:  
  7. $sms = Sms::make('YunTongXun''your_temp_id');  
  8. //或  
  9. $sms = Sms::make([  
  10.     'YunTongXun' => 'your_temp_id',  
  11.     'SubMail' => 'your_temp_id',  
  12.     ...  
  13. ]);  

 

Sms::voice()

生成发送语音验证码的sms实例,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms = Sms::voice();  
  2.   
  3. //创建实例的同时设置验证码/语音文件ID  
  4. $sms = Sms::voice($code);  

 

  • 如果你使用Luosimao语音验证码,还需用在配置文件中Luosimao选项中设置voiceApikey
  • 语音文件ID即是在服务商配置的语音文件的唯一编号,比如阿里大鱼语音通知voice_code
  • 模版语音是另一种语音请求方式,它是通过模版ID和模版数据进行的语音请求,比如阿里大鱼的文本转语音通知

$sms->to($mobile)

设置发送给谁,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms->to('1828*******');  

 

 

$sms->template($templates)



指定代理器设置模版id或批量设置,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //设置指定服务商的模板id  
  2. $sms->template('YunTongXun''your_temp_id')  
  3.     ->template('SubMail''your_temp_id');  
  4.   
  5. //一次性设置多个服务商的模板id  
  6. $sms->template([  
  7.     'YunTongXun' => 'your_temp_id',  
  8.     'SubMail' => 'your_temp_id',  
  9.     ...  
  10. ]);  

 

 

 

$sms->data($data)

设置模板短信的模板数据,并返回实例对象,$data必须为数组。

 

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms->data([  
  2.     'code' => $code,  
  3.     'minutes' => $minutes  
  4. ]);  

 

 

通过templatedata方法的组合除了可以实现模版短信的数据填充,还可以实现模版语音的数据填充。

 

$sms->content($text)

 

设置内容短信的内容,并返回实例对象。一些内置的代理器(如YunPian,Luosimao)使用的是内容短信(即直接发送短信内容),那么就需要为它们设置短信内容。

 

[php] view plain copy
 
  1. $sms->content('【签名】这是短信内容...');  

 

$sms->getData([$key])

获取Sms实例中的短信数据,不带参数时返回所有数据,其结构如下:

 

[php] view plain copy
 
  1. [  
  2.     'type'         => ...,  
  3.     'to'           => ...,  
  4.     'templates'    => [...],  
  5.     'content'      => ...,  
  6.     'templateData' => [...],  
  7.     'voiceCode'    => ...,  
  8. ]  

 

$sms->agent($name)

临时设置发送时使用的代理器(不会影响备用代理器的正常使用),并返回实例,$name为代理器名称。

 

[php] view plain copy
 
  1. $sms->agent('YunPian');  

 

通过该方法设置的代理器将获得绝对优先权,但只对当前短信实例有效。

$sms->send()

请求发送短信/语音验证码。

 

[php] view plain copy
 
  1. //会遵循是否使用队列:  
  2. $result = $sms->send();  
  3.   
  4. //忽略是否使用队列:  
  5. $result = $sms->send(true);  

 

$result数据结构请参看task-balancer

高级调度配置

代理器的高级调度配置可以通过配置文件(config/phpsms.php)中的scheme项目配置,也可以通过scheme静态方法设置。 值得注意的是,高级调度配置的值的数据结构是数组。

指定代理器类

如果你自定义了一个代理器,类名不为FooAgent或者命名空间不为Toplan\PhpSms,那么你还可以在调度配置时指定你的代理器使用的类。

  • 配置方式:

通过配置值中agentClass键来指定类名。

  • 示例:
[php] view plain copy
 
  1. Sms::scheme('agentName', [  
  2.     '10 backup',  
  3.     'agentClass' => 'My\Namespace\MyAgentClass'  
  4. ]);  

寄生代理器

如果你既不想使用内置的代理器,也不想创建文件写自定义代理器,那么寄生代理器或许是个好的选择,无需定义代理器类,只需在调度配置时定义好发送短信和语音验证码的方式即可。

  • 配置方式:

通过配置值中sendSms和voiceVerify键来设置发送短信和语音验证码的方式。

  • 示例:
[php] view plain copy
 
  1. Sms::scheme([  
  2.     'agentName' => [  
  3.         '20 backup',  
  4.         'sendSms' => function($agent$to$content$tempId$tempData){  
  5.             //获取配置(如果设置了的话):  
  6.             $key = $agent->key;  
  7.             ...  
  8.             //内置方法:  
  9.             Agent::sockPost(...);  
  10.             Agent::curl(...);  
  11.             ...  
  12.             //更新发送结果:  
  13.             $agent->result(Agent::SUCCESS, true);  
  14.             $agent->result(Agent::INFO, 'some info');  
  15.             $agent->result(Agent::CODE, 'your code');  
  16.         },  
  17.         'voiceVerify' => function($agent$to$code$tempId$tempData){  
  18.             //发送语音验证码,同上  
  19.         }  
  20.     ]  
  21. ]);  

自定义代理器

  • step 1

配置项加入到config/phpsms.php中键为agents的数组里。

 

[php] view plain copy
 
  1. //example:  
  2. 'Foo' => [  
  3.     'key' => 'your api key',  
  4.     ...  
  5. ]  

 

  • step 2

新建一个继承Toplan\PhpSms\Agent抽象类的代理器类,建议代理器类名为FooAgent,建议命名空间为Toplan\PhpSms。 如果类名不为FooAgent或者命名空间不为Toplan\PhpSms,在使用该代理器时则需要指定代理器类,详见高级调度配置

Change logs

v1.4.0

该系列版本相较与之前版本在api的设计上有些变动,具体如下:

  • 修改原enable静态方法为scheme

  • 修改原agents静态方法为config

  • 修改原cleanEnableAgents静态方法为cleanScheme

  • 修改原cleanAgentsConfig静态方法为cleanConfig

  • 去掉getEnableAgents和getAgentsConfig静态方法

v1.5.0

  • 改进语音信息的发送接口以适应阿里大鱼的通过文本转语音和语音文件id两个接口的需求
  • 新加阿里大鱼(Alidayu)代理器

公告

  1. 如果在使用队列相关功能时出现如下错误:
[php] view plain copy
 
  1. Fatal error:Maximum function nesting level of ‘100′ reached, aborting!  

可在/etc/php5/mods-available/xdebug.ini(Linux)中新加xdebug.max_nesting_level=500

Todo list

  •  可用代理器分组配置功能;短信发送时选择分组进行发送的功能。

Encourage

hi, guys! 如果喜欢或者要收藏,欢迎star。如果要提供意见和bug,欢迎issue或提交pr。

License

MIT

分享到:
评论

相关推荐

    可能是目前最聪明优雅的php短信发送库了

    phpsms 可能是目前最聪明、优雅的php短信发送库了。从此不再为各种原因造成的个别短信发送失败而烦忧! 特点: 支持短信/语音发送均衡调度,可按代理器权重值均衡选择服务商发送。 支持一个或多个备用代理器(服务商...

    phpsms, Probably the most intelligent, elegant sms send library in php.zip

    phpsms, Probably the most intelligent, elegant sms send library in php

    php编写的发送SMS消息的类 可以下载打包文件

    NULL 博文链接:https://duchengjiu.iteye.com/blog/1739673

    phpSMS-开源

    可定制的 php 脚本,使用免费短信提供者发送短信(sms)

    高级色系PPT11.pptx

    高级色系PPT11.pptx

    node-v7.9.0-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于tensorflow的的cnn卷积神经网络的图像识别分类

    【作品名称】:基于tensorflow的的cnn卷积神经网络的图像识别分类 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    ### 数据分析概念、使用技巧、优缺点的文章

    数据分析是指通过收集、清洗、处理和解释数据,以发现其中的模式、趋势和关联,从而提供决策支持或洞察见解的过程。它在各行各业中都扮演着至关重要的角色,从市场营销到科学研究,从金融领域到医疗保健,都有广泛的应用。

    对微信帐单进行数据分析

    #pip install pandas -i https://mirrors.aliyun.com/pypi/simple #安装pandas处理数据模块 #pip install xlwt -i https://mirrors.aliyun.com/pypi/simple #安装excel模块 #pip install openpyxl #从微信导出对帐帐单 import pandas as pd #引入pandas,重命名为pd,Python3.9.10版本的Pandas无法兼容低版本的xls import numpy as np #导入均值模块 #从第17行读取csv格式的帐单 df = pd.read_csv('微信支付账单(20230101-20230401).csv',header=16) #分析数据 ...... #将分析数据另存为out.xlsx ..... #进行交易进间分析 ...... #统计交易对方 ...... #将结果保存到excel ..... writer.close()

    node-v7.2.0-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    作业.docx

    作业.docx

    DB23∕T 2540-2019 智慧城市建设项目可行性研究报告.pdf

    DB23∕T 2540-2019 智慧城市建设项目可行性研究报告.pdf

    在CentOS系统上安装Docker 步骤

    附件是在CentOS系统上安装Docker 步骤,仅供交流学习使用,无任何商业目的! 在执行这些步骤之前,请确保你的CentOS系统已经更新到最新,并且你了解Docker容器技术的相关概念。如果你在安装过程中遇到任何问题,可以查看Docker的官方文档或搜索相关的错误信息。

    node-v0.12.3-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    蜂群系统链性态网体系化作战矩阵.txt

    蜂群系统链性态网体系化作战矩阵.txt

    高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip

    【资源概览】 高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip高分毕业设计 基于STM32单片机的智能鱼缸设计源代码+原理图+器件清单+实物焊接效果+项目资料齐全.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    ### 这是一篇对Qt开发进行了详细概述的文章

    Qt是一套跨平台的C++应用程序开发框架,被广泛应用于开发图形用户界面(GUI)程序、嵌入式系统、移动设备应用等领域。它提供了丰富的类库和工具,使得开发者可以快速构建功能强大、美观易用的应用程序。以下是一个涵盖Qt开发的教程和案例的综合描述。

    高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的电子血压计设计源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    node-v7.1.0-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于深度神经网络的图像分类任务.zip

    基于深度神经网络的图像分类任务.zip

Global site tag (gtag.js) - Google Analytics