#362
展开↯#363
展开↯#364
作者:广西河池市
流程.doc #,广西南宁市,2019-04-03,09:34:36, 短信字数含"签名+模版内容+变量内容”,短信70个字数含以内,按1条短信计费;超出70个字为长短信,按照67个字数记为1条短信费用。 #,广西南宁市,2019-04-04,17:25:51, 微信小程序打多个空格 #,广西南宁市,2019-04-04,17:26:21, #,广西南宁市,2019-04-09,15:32:36, 微信默认头像

#,广西南宁市,2019-04-09,15:37:19, http://glhtglxtxlzq.test2.resonance.net.cn/v.php #,广西南宁市,2019-04-11,00:25:33,
微信小程序中的多个空格怎么打?  不行。
在wxml中直接用 decode="{{true}}" 和  ,但是不行。代码语句如下:
部<text decode="{{true}}" space="{{true}}"> </text>门
后来通过下面的方式解决了:
可以打中文全角空格,
如下面的:
复 制 吧 我上面每个字之间都有一个空白字符
具体代码如下:
部 门Run code
Cut to clipboard
public 表示全局,类内部外部子类都可以访问;
private表示私有的,只有本类内部可以使用;
protected表示受保护的,只有本类或子类或父类中可以访问;Run code
Cut to clipboard
文章:@意见反馈/技术支持/伊网/安企网 发表时间:2019-03-31, 02:32:15
#365
作者:广西南宁市
js中对String去空格
str为要去除空格的字符串:
去除所有空格:
#,广西南宁市,2019-03-24,15:34:57, PHP保留两位小数的几种方法
str为要去除空格的字符串:
去除所有空格:
str = str.replace(/\s+/g,""); Run code
Cut to clipboard
$num = 10.4567;
//第一种:利用round()对浮点数进行四舍五入
echo round($num,2); //10.46
//第二种:利用sprintf格式化字符串
$format_num = sprintf("%.2f",$num);
echo $format_num; //10.46
//第三种:利用千位分组来格式化数字的函数number_format()
echo number_format($num, 2); //10.46
//或者如下
echo number_format($num, 2, '.', ''); //10/46Run code
Cut to clipboard
文章:Laravel Npm Node 发表时间:2019-03-24, 15:34:37
#366
作者:广西南宁市
iview 表格(table) 里使用图片(img)
不要使用props,这种的需要使用attrs!
{
title: '头像',
key: 'avatar',
columns: {
'width':'50px'
},
render: (h, params) => {
return h('div', [
h('img', {
attrs: {
src: params.row.avatar
},
style: {
width: '40px',
height: '40px'
}
}),
]);
}
},Run code
Cut to clipboard
文章:Laravel Npm Node 发表时间:2019-03-19, 16:16:00
#368
作者:广西南宁市
CentOS 7 设置 svn 开机启动
找到 svn 的 service 配置文件 /etc/sysconfig/svnserve 编辑配置文件
vi /etc/sysconfig/svnserveRun code
Cut to clipboard
在提示符下输入
systemctl enable svnserve.serviceRun code
Cut to clipboard
ps -aux | grep 'svn' Run code
Cut to clipboard
修改/etc/fstab文档
vi /etc/fstabRun code
Cut to clipboard
把要挂载的盘信息加到里面
/dev/emcpowerb1 /oracle/oradata ext3 defaults 0 0Run code
Cut to clipboard
本身目录下运行
sh test.sh Run code
Cut to clipboard
文章:Linux系统中svn服务器设置开机启动 发表时间:2019-02-25, 15:10:08
#369
作者:广西河池市
Nginx配置 Laravel 正常访问
在nginx.conf 里对应的server{}中配置如下代码
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
}
然后 重启 systemctl restart nginx即可Run code
Cut to clipboard
文章:Laravel Npm Node 发表时间:2019-02-23, 14:20:24
#370
作者:广西南宁市
微信小程序placeholder设置自定义颜色
<view class='inp'>
<input placeholder-class="phcolor" class="input-text" name="username" placeholder="测试placeholder" />
</view>
Run code
Cut to clipboard
.phcolor{
color: #18acff;
}
Run code
Cut to clipboard
文章:微信小程序自定义选项卡tabBar模板底部顶部导航 发表时间:2019-02-21, 15:06:14
#371
作者:广西河池市
检查是否已经有svn
svnserve --version
安装
yum install -y subversion
检查安装是否成功
同样用的是 svnserve –version成功安装会显示版本信息
svnserve --versionRun code
Cut to clipboard
文章:Linux系统中svn服务器设置开机启动 发表时间:2019-02-16, 14:43:00
#372
作者:广西河池市
CentOS7关闭/开启防火墙
添加
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=1000-2000/tcp --permanent
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone=public --query-port=80/tcp
删除
firewall-cmd --zone=public --remove-port=80/tcp --permanentRun code
Cut to clipboard
文章:Linux系统中svn服务器设置开机启动 发表时间:2019-02-16, 14:32:36
#373
作者:广西南宁市
vue编译错误
修改
node_modules\laravel-mix\setup\webpack.config.js
注释掉
碰到的问题(Couldn't find preset "es2015" relative to directory)
MODULE BUILD FAILED: ERROR: COULDN’T FIND PRESET “ES2015” RELATIVE TO DIRECTORY
遇到这个问题的时候我们需要安装 babel-preset-es2015
#,广西南宁市,2019-02-11,18:10:31, mysql随机获取一条或者多条数据
在使用webpack2.x打包时,出现下面报错(Unexpected token name «i», expected punc «;»):
ERROR in app.js from UglifyJs
Unexpected token name «i», expected punc «;» [app.js:9461,13]
定位到的报错是:
function oneOf (value, validList) {
for (let i = 0; i < validList.length; i++) {//此行报错
if (value === validList[i]) {
return true;
}
}
return false;
}
看样子是UglifyJs压缩插件在遇到es6语法时出错了。但是项目中自己写的代码是有用babel编译的,上面报错的代码应该是来自vue的库。为什么这些代码没有经过babel编译后才执行UglifyJs压缩呢?Run code
Cut to clipboard
修改
node_modules\laravel-mix\setup\webpack.config.js
注释掉
{
test: /\.jsx?$/,
//exclude: /(node_modules|bower_components)/,
loader: 'babel-loader' + Mix.babelConfig()
},Run code
Cut to clipboard
碰到的问题(Couldn't find preset "es2015" relative to directory)
MODULE BUILD FAILED: ERROR: COULDN’T FIND PRESET “ES2015” RELATIVE TO DIRECTORY
遇到这个问题的时候我们需要安装 babel-preset-es2015
npm install babel-preset-es2015 --save-devRun code
Cut to clipboard
/*{
test: /iview.src.*?js$/,
loader: 'babel-loader'
},*/
{
test: /\.jsx?$/,
//exclude: /(node_modules|bower_components)/,
loader: 'babel-loader' + Mix.babelConfig()
}Run code
Cut to clipboard
{
"private": true,
"scripts": {
"serve": "php artisan serve",
"apidoc": "apidoc -i app/Http/Controllers/Api/v2 -o public/docs",
"ide-helper": "php artisan ide-helper:generate",
"git-push": "git add -A && git commit -m 'no msg' && git push --progress 'origin' master:master",
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"fix-memory-limit": "cross-env LIMIT=8096 increase-memory-limit"
},
"devDependencies": {
"axios": "^0.15.3",
"babel-loader": "^7.1.1",
"babel-preset-es2015": "^6.24.1",
"bootstrap-sass": "^3.3.7",
"cross-env": "^3.2.4",
"css-loader": "^0.26.4",
"element-ui": "^1.3.7",
"fastclick": "^1.0.6",
"increase-memory-limit": "^1.0.6",
"jquery": "^3.2.1",
"laravel-mix": "^0.12.1",
"lodash": "^4.17.4",
"stylus": "^0.54.5",
"stylus-loader": "^3.0.1",
"vue": "^2.4.2",
"vue-loader": "^11.3.4",
"vue-router": "^2.7.0",
"vue-style-loader": "^2.0.5",
"vue-template-compiler": "^2.4.2"
},
"dependencies": {
"chart.js": "^2.6.0",
"iview": "^2.0.0",
"vant": "^0.12.3",
"vue-chartjs": "^2.7.2",
"vue-github-badge": "^1.0.1",
"vue-html5-editor": "^1.1.1",
"vue-image-crop-upload": "^2.1.3",
"vue-quill-editor": "^2.2.6",
"vue-social-share": "^0.0.3",
"vuex": "^3.0.1"
}
}
Run code
Cut to clipboard
var mix = require('laravel-mix');
var production=0;
//282216
//284050
// npm run watch
// npm run production
if(production) Mix.babelConfig={
babelrc: false,
presets: [
['es2015'],
],
};
//复制图片资源
//mix.copy('resources/assets/images', 'public/images');
//生成vue页面js
mix
//.js('resources/assets/js/app.js', 'public/js/app.js')
.js('resources/assets/js/admin/main.js', 'public/js/admin.js')
//.js('resources/assets/js/api/main.js', 'public/js/api.js')
//.js('resources/assets/js/business/main.js', 'public/js/business.js')
.js('resources/assets/js/city/main.js', 'public/js/city.js');
//生成bootstrap样式文件
//mix.sass('resources/assets/sass/app.scss', 'public/css');
//配置webpack
mix.webpackConfig({
output: {
// 路由懒加载文件路径
chunkFilename: "js/build/[id].js?[hash:8]"
},
module: {
rules: [{
// 图片资源保存路径规则
test: /\.(png|jpe?g|gif)$/,
loaders: [
{
loader: 'file-loader',
options: {
name: path => {
// 自定义部分
try {
if (/\/resources\/assets\//.test(path)) {
var file = path.substring(path.indexOf('/resources/assets/') + '/resources/assets/'.length);
if (file) {
if (file.substring(0, 3) === 'js/') file = 'pages/' + file.substring(3);
if (file.substring(0, 7) === 'images/') file = file.substring(7);
return 'images/' + file + '?[hash:8]'
}
}
} catch (e) { }
// 系统定义部分
if (!/node_modules|bower_components/.test(path)) {
return 'images/[name].[ext]?[hash:8]';
}
return 'images/vendor/' + path
.replace(/\\/g, '/')
.replace(
/((.*(node_modules|bower_components))|images|image|img|assets)\//g, ''
) + '?[hash:8]';
},
publicPath: mix.config.options.resourceRoot
}
}
]
}, {
// 字体资源保存路径规则
test: /\.(woff2?|ttf|eot|svg|otf)$/,
loader: 'file-loader',
options: {
name: path => {
// 自定义部分
try {
if (/\/resources\/assets\//.test(path)) {
var file = path.substring(path.indexOf('/resources/assets/') + '/resources/assets/'.length);
if (file) {
if (file.substring(0, 3) === 'js/') file = 'pages/' + file.substring(3);
if (file.substring(0, 7) === 'fonts/') file = file.substring(7);
return 'fonts/' + file + '?[hash:8]'
}
}
} catch (e) { }
// 系统定义部分
if (!/node_modules|bower_components/.test(path)) {
return 'fonts/[name].[ext]?[hash:8]';
}
return 'fonts/vendor/' + path
.replace(/\\/g, '/')
.replace(
/((.*(node_modules|bower_components))|fonts|font|assets)\//g, ''
) + '?[hash:8]';
},
publicPath: mix.config.options.resourceRoot
}
}]
}
});Run code
Cut to clipboard
语句二:
SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(userId) FROM `users`)-(SELECT MIN(userId) FROM users))+(SELECT MIN(userId) FROM users)) AS userId) AS t2 WHERE t1.userId >= t2.userId ORDER BY t1.userId LIMIT 1
执 行该sql语句,用时0.031s,效率非常好。当把”LIMIT 1“改为了”LIMIT 100“ 随机取一百条记录,用时0.048s。可是就在此时问题出现了,发现结果好像不是随机的。为了验证结果,又执行了N次,的确不是随机的。问题出现 在”ORDER BY t1.userId“这里,按userId排序了。随机取一条记录还是不错的选择,多条就不行了啊。
---------分隔线------------------------------------
语句三:
SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users) LIMIT 1
执行该sql语句,用时0.039s,效率也是非常好。接着把”LIMIT 1“改为了”LIMIT 10000“,用时0.063s。经过多次验证,得出的结果都是随机的。
---------分隔线------------------------------------
结论:随机获得一条记录,语句二是相当不错的选择,采用JOIN的语法比直接在WHERE中使用函数效率还是要高一些的。语句三也不错,随机获得多条记录的首选。Run code
Cut to clipboard
文章:Laravel Npm Node 发表时间:2019-02-11, 10:43:38
#374
作者:广西
后来,南山的风吹散了谷堆,北海的水淹没了墓碑,你应该仔细看我一眼,我又有几分像从前,我这般爱闹的性子,终究也被打磨成,如今的沉默寡言。 #,广西,2019-02-03,08:42:37, 再后来南山的谷堆被重新堆起,北海的墓碑也再次重建。从前的日子回不去了就是回不去了。余生还长,日子还在,又何必慌张。
文章:成功的故事只能倒叙着讲 发表时间:2019-02-03, 08:41:33
#375
作者:广西南宁市
小程序使用wss
微信小程序wss地址不允许使用端口,于是就利用nginx转发。
1、nginx版本是需要大于1.3
2、nginx配置文件修改
upstream websocket {
server ip:端口; //转发
}
server {
listen 443;
server_name 域名;
ssl on;
ssl_certificate 证书;
ssl_certificate_key 证书;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /wss {
access_log /usr/share/nginx/logs/https-websocket.log;
proxy_pass http://websocket/; # 代理到上面
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
rewrite /wss/(.*) /$1 break;
proxy_redirect off;
}
}Run code
Cut to clipboard
$gateway = new Gateway("websocket://0.0.0.0:9993");Run code
Cut to clipboard
4、小程序那直接使用这个url : wss://域名/wss
文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接 发表时间:2019-01-17, 17:43:11
#376
作者:广西南宁市
<?php
namespace App\Console\Commands;
use Workerman\Worker;
use Illuminate\Console\Command;
class WorkermanCommand extends Command
{
private $server;
/**
* The name and signature of the console command.
*
* @var string
*/
//protected $signature = 'wk {action}';
protected $signature = 'workman {action} {--d}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Start a Workerman server.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
global $argv;
$action = $this->argument('action');
$argv[0] = 'wk';
$argv[1] = $action;
$argv[2] = $this->option('d') ? '-d' : '';
// php artisan workman start --d
switch ($action) {
case 'start':
$this->start();
break;
case 'stop':
break;
case 'restart':
break;
case 'reload':
break;
case 'status':
break;
case 'connections':
break;
}
}
private function start()
{
// 证书最好是申请的证书
$context = array(
// 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php
'ssl' => array(
// 请使用绝对路径
'local_cert' => '/www/wdlinux/nginx/conf/cert/a.******.net-ca-bundle.crt', // 也可以是crt文件
'local_pk' => '/www/wdlinux/nginx/conf/cert/a.******.net.key',
'verify_peer' => false,
//'verify_peer_name' => false,
//'allow_self_signed' => true, //如果是自签名证书需要开启此选项
)
);
// 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用)
$worker = new Worker("websocket://0.0.0.0:20002",$context);
// 设置transport开启ssl,websocket+ssl即wss
//$this->server->transport = 'ssl';
// 启动4个进程对外提供服务
$worker->count = 1;
$worker->uidConnections = array();
$handler = \App::make('App\Handlers\WorkermanHandler');
// 连接时回调
/*$worker->onWorkerStart = function($worker){
global $handler;
// 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
$inner_text_worker = new Worker('Text://0.0.0.0:5678');
$inner_text_worker->onMessage = [$handler, 'onMessage'];
$inner_text_worker->listen();
};*/
$worker->onConnect = [$handler, 'onConnect'];
// 收到客户端信息时回调
$worker->onMessage = [$handler, 'onMessage'];
// 进程启动后的回调
$worker->onWorkerStart = [$handler, 'onWorkerStart'];
// 断开时触发的回调
$worker->onClose = [$handler, 'onClose'];
// 运行worker
Worker::runAll();
}
}Run code
Cut to clipboard
Input "php wk stop" to stop. Start success.Run code
Cut to clipboard
<?php
namespace App\Console\Commands;
use Workerman\Worker;
use Illuminate\Console\Command;
class WorkermanCommand extends Command
{
private $server;
/**
* The name and signature of the console command.
*
* @var string
*/
//protected $signature = 'wk {action}';
protected $signature = 'workman {action} {--d}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Start a Workerman server.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
global $argv;
$action = $this->argument('action');
$argv[0] = 'wk';
$argv[1] = $action;
$argv[2] = $this->option('d') ? '-d' : '';
// php artisan workman start --d
switch ($action) {
case 'start':
$this->start();
break;
case 'stop':
break;
case 'restart':
break;
case 'reload':
break;
case 'status':
break;
case 'connections':
break;
}
}
private function start()
{
// 证书最好是申请的证书
$context = array(
// 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php
'ssl' => array(
// 请使用绝对路径
'local_cert' => '/www/wdlinux/nginx/conf/cert/a.***.net-ca-bundle.crt', // 也可以是crt文件
'local_pk' => '/www/wdlinux/nginx/conf/cert/a.***.net.key',
'verify_peer' => false,
//'verify_peer_name' => false,
//'allow_self_signed' => true, //如果是自签名证书需要开启此选项
)
);
// 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用)
$worker = new Worker("websocket://0.0.0.0:20002",$context);
// 设置transport开启ssl,websocket+ssl即wss
//$this->server->transport = 'ssl';
// 设置transport开启ssl
$worker->transport = 'ssl';
// 启动4个进程对外提供服务
$worker->count = 1;
$worker->uidConnections = array();
$handler = \App::make('App\Handlers\WorkermanHandler');
// 连接时回调
/*$worker->onWorkerStart = function($worker){
global $handler;
// 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
$inner_text_worker = new Worker('Text://0.0.0.0:5678');
$inner_text_worker->onMessage = [$handler, 'onMessage'];
$inner_text_worker->listen();
};*/
$worker->onConnect = [$handler, 'onConnect'];
// 收到客户端信息时回调
$worker->onMessage = [$handler, 'onMessage'];
// 进程启动后的回调
$worker->onWorkerStart = [$handler, 'onWorkerStart'];
// 断开时触发的回调
$worker->onClose = [$handler, 'onClose'];
// 运行worker
Worker::runAll();
}
}Run code
Cut to clipboard
文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接 发表时间:2019-01-16, 10:52:04
#378
作者:广西南宁市
laravel 调试模式及日志配置
1)调试模式和日志的配置都在 config/app.php 配置文件中
2)打开调试模式
'debug' => env('APP_DEBUG', true)
3)laravel的日志默认已经打开了(不可以关),我们可以修改一下日志的记录方式(默认 single 单文件记录)
'log' => env('APP_LOG', 'daily')
PS:日志的记录方式有 single, daily, syslog, errorlog
4)设置报错级别(避免生成过多日志)
'log_level' => env('APP_LOG_LEVEL', 'error')
PS:config/app.php 文件里默认是没这个配置项的,要自己加,可以使用的值还有 debug, info, notice, warning, error, critical, alert, emergencyRun code
Cut to clipboard
文章:Laravel Npm Node 发表时间:2019-01-08, 17:06:25
#379
作者:广西南宁市
linux用nohup在后台常驻运行php脚本
nohup php a.php &
这样即使退出了终端,a.php依然在后台运行。Run code
Cut to clipboard
文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接 发表时间:2019-01-04, 08:45:03
#380
作者:广西南宁市
简单的开发实例
实例一、使用HTTP协议对外提供Web服务
创建http_test.php文件(位置任意,能引用到Workerman/Autoloader.php即可,下同)
命令行运行(windows用户用 cmd命令行,下同)
测试
假设服务端ip为127.0.0.1
在浏览器中访问url http://127.0.0.1:2345
实例二、使用WebSocket协议对外提供服务
创建ws_test.php文件
命令行运行
测试
打开chrome浏览器,按F12打开调试控制台,在Console一栏输入(或者把下面代码放入到html页面用js运行)
实例三、直接使用TCP传输数据
创建tcp_test.php
命令行运行
测试:命令行运行 (以下是linux命令行效果,与windows下效果有所不同)
#,广西南宁市,2019-01-04,08:43:55, 慎用composer update
实例一、使用HTTP协议对外提供Web服务
创建http_test.php文件(位置任意,能引用到Workerman/Autoloader.php即可,下同)
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
// 创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("http://0.0.0.0:2345");
// 启动4个进程对外提供服务
$http_worker->count = 4;
// 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function($connection, $data)
{
// 向浏览器发送hello world
$connection->send('hello world');
};
// 运行worker
Worker::runAll();Run code
Cut to clipboard
命令行运行(windows用户用 cmd命令行,下同)
php http_test.phpRun code
Cut to clipboard
测试
假设服务端ip为127.0.0.1
在浏览器中访问url http://127.0.0.1:2345
实例二、使用WebSocket协议对外提供服务
创建ws_test.php文件
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
// 注意:这里与上个例子不同,使用的是websocket协议
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// 启动4个进程对外提供服务
$ws_worker->count = 4;
// 当收到客户端发来的数据后返回hello $data给客户端
$ws_worker->onMessage = function($connection, $data)
{
// 向客户端发送hello $data
$connection->send('hello ' . $data);
};
// 运行worker
Worker::runAll();Run code
Cut to clipboard
命令行运行
php ws_test.php startRun code
Cut to clipboard
测试
打开chrome浏览器,按F12打开调试控制台,在Console一栏输入(或者把下面代码放入到html页面用js运行)
// 假设服务端ip为127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("连接成功");
ws.send('tom');
alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};Run code
Cut to clipboard
实例三、直接使用TCP传输数据
创建tcp_test.php
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
// 创建一个Worker监听2347端口,不使用任何应用层协议
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// 启动4个进程对外提供服务
$tcp_worker->count = 4;
// 当客户端发来数据时
$tcp_worker->onMessage = function($connection, $data)
{
// 向客户端发送hello $data
$connection->send('hello ' . $data);
};
// 运行worker
Worker::runAll();Run code
Cut to clipboard
命令行运行
php tcp_test.php startRun code
Cut to clipboard
测试:命令行运行 (以下是linux命令行效果,与windows下效果有所不同)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tomRun code
Cut to clipboard
composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害。
因为 composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是 所有扩展包,Run code
Cut to clipboard
文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接 发表时间:2019-01-02, 18:13:33
<div v-for="(items key index) in list" :key="key"></div>如果使用v-for循环中的key键值或者index索引值,得到的结果都是无法实现单条数据渲染,只有使用items中的自身属性才可以达到单条数据各自渲染的结果,所以,一般会使用:key="items.id"等items中的属性。 一般来说,使用:key="items.id"的属性有利于代码的优化,减少页面资源消耗.layui-inline{position: relative; display: inline-block; *display:inline; *zoom:1; vertical-align: middle;}可以使用“帐户”,但最好是用“账户” 帐号是在网络和多用户操作系统中保存着一种记录,用于记录授权用户的行为。在 iOS 上,当微信客户端在一定时间间隔内(目前是 5 秒)连续收到两次及以上系统内存告警时,会主动进行小程序的销毁,并提示用户 「该小程序可能导致微信响应变慢被终止」。