All posts by 龙生
js实现webSocket客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
var ws = new WebSocket("ws://localhost:8080/msg"); //readyState属性返回实例对象的当前状态,共有四种。 //CONNECTING:值为0,表示正在连接。 //OPEN:值为1,表示连接成功,可以通信了。 //CLOSING:值为2,表示连接正在关闭。 //CLOSED:值为3,表示连接已经关闭,或者打开连接失败 //例如:if (ws.readyState == WebSocket.CONNECTING) { } //【用于指定连接成功后的回调函数】 ws.onopen = function (evt) { console.log("Connection open ..."); ws.send("Hello WebSockets!"); }; //ws.addEventListener('open', function (event) { // ws.send('Hello Server!'); //}; //【用于指定收到服务器数据后的回调函数】 //【服务器数据有可能是文本,也有可能是二进制数据,需要判断】 ws.onmessage = function (event) { if (typeof event.data === String) { console.log("Received data string"); } if (event.data instanceof ArrayBuffer) { var buffer = event.data; console.log("Received arraybuffer"); } console.log("Received Message: " + evt.data); ws.close(); }; //[【于指定连接关闭后的回调函数。】 ws.onclose = function (evt) { console.log("Connection closed."); }; //发送文本 ws.send("Hello WebSockets!"); //发送Blob数据 var file = document .querySelector('input[type="file"]') .files[0]; ws.send(file); //发送ArrayBuffer var img = canvas_context.getImageData(0, 0, 400, 320); var binary = new Uint8Array(img.data.length); for (var i = 0; i < img.data.length; i++) { binary[i] = img.data[i]; } ws.send(binary.buffer); //webSocket.bufferedAmount //bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去。它可以用来判断发送是否结束 var data = new ArrayBuffer(10000000); socket.send(data); if (socket.bufferedAmount === 0) { // 发送完毕 } else { // 发送还没结束 } //webSocket.onerror 用于指定报错时的回调函数 ws.onerror = function (event) { }; es.addEventListener("error", function (event) { }); |
from:https://www.cnblogs.com/liuqiyun/p/9984679.html
View DetailsHTML5 WebSocket
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。 HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。 浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。 当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。 以下 API 用于创建 WebSocket 对象。
1 |
var Socket = new WebSocket(url, [protocol] ); |
以上代码中的第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。 WebSocket 属性 以下是 WebSocket 对象的属性。假定我们使用了以上代码创建了 Socket 对象: 属性 描述 Socket.readyState 只读属性 readyState 表示连接状态,可以是以下值: 0 – 表示连接尚未建立。 1 – 表示连接已建立,可以进行通信。 2 – 表示连接正在进行关闭。 3 – 表示连接已经关闭或者连接不能打开。 Socket.bufferedAmount 只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。 WebSocket 事件 以下是 WebSocket 对象的相关事件。假定我们使用了以上代码创建了 Socket 对象: 事件 事件处理程序 描述 open Socket.onopen 连接建立时触发 […]
View DetailsModule not found: Error: Can’t resolve 'XXX' in 'XXXX'
故障 控制台运行webpack/npm时出现 Module not found: Error: Can’t resolve 'XXX' in 'XXXX' 1 解决方案 npm i XXX --save 1 重新运行即可 如果提示ERROR 尝试执行 npm uninstall XXX npm i XXX --save ———————————————— 版权声明:本文为CSDN博主「YooHoeh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u011215669/article/details/81231552
View Details在asp.net 中应用POST传递和接收XML文件以及参数.(转)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
使用POST方式可以向别的页面发送请求,并获取返回结果。 可以从一个页面发送POST到另一个页面,也可以在winform工程中使用HTTPRequest发送POST到一个页面。我们拿ASP.NET的aspx页面做个例子,从一个aspx页面POST.aspx ,发送请求到Receive.aspx页面。 1.首先,建立工程,添加两个页面,Post.aspx和Receive.aspx 在post页面中放一个BUTTON,在它的click方法中我们可以写这样的一段代码: private void Button1_Click(object sender, System.EventArgs e) { //XML文件路径 string xmlFileName = Server.MapPath("File/Frame.xml"); HttpWebRequest req = null; try { //设置要POST到的页面URL,这里中文参数或者有特殊符号的,要进行编码. string url = "http://localhost/Receive.aspx" + "?DwgFileName="+HttpUtility.UrlEncode("NNN+10111452505252706++2.bmp,NNN+10111457375757706++13.bmp")+ "&PltFileName="+HttpUtility.UrlEncode("NNN+10110934363434706++主页.JPG"); //创建一个HttpWebRequest对象 req = (HttpWebRequest) HttpWebRequest.Create(url); //设置它提交数据的方式post req.Method = "POST"; //设置 Content-type HTTP 标头的值 req.ContentType = "text/xml";// "application/x-www-form-urlencoded;charset=gb2312"; using (StreamWriter requestWriter = new StreamWriter(req.GetRequestStream())) { //定义一个StreamReader对象,用于读取xml文件的内容 StreamReader reader = new StreamReader(xmlFileName); string ret = reader.ReadToEnd(); reader.Close(); requestWriter.WriteLine(ret);//将读取的内容写入到RequestStream中。 } Response.Write("发出去了"); } catch(Exception ex) { throw ex; } finally{ } } 2. 再来看一下接收页面Receive.aspx 在Receive.aspx页面的PageLoad方法中进行接收POST过来的请求。 private void Page_Load(object sender, System.EventArgs e) { if(Request.RequestType == "POST") { //Response.ContentType = "text/xml"; string pltFileName = Request.QueryString["PltFileName"];//PLT文件名 string dwgFileName = Request.QueryString["DwgFileName"];//dwg文件名列表 :111.dwg,222.dwg,333.dwg..... //接收并读取POST过来的XML文件流 StreamReader reader = new StreamReader(Request.InputStream); String xmlData = reader.ReadToEnd(); try { //声明一个XMLDoc文档对象,LOAD()xml字符串 XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlData); //得到XML文档根节点 XmlElement root = doc.DocumentElement; .....进行自己对XML的操作。。。 } |
from:https://www.cnblogs.com/shenyixin/p/4630698.html
View DetailsC#字符串查找速度优化--StringComparison.Ordinal
本文一些资料参考自https://blog.csdn.net/sinat_27657511/article/details/52275327,感谢这位博主 下面就来谈下StringComparison。 public enum StringComparison { CurrentCulture, CurrentCultureIgnoreCase, InvariantCulture, InvariantCultureIgnoreCase, Ordinal, OrdinalIgnoreCase } CurrentCulture 使用区域敏感排序规则和当前区域比较字符串。 CurrentCultureIgnoreCase 使用区域敏感排序规则、当前区域来比较字符串,同时忽略被比较字符串的大小写。 InvariantCulture 使用区域敏感排序规则和固定区域比较字符串。 InvariantCultureIgnoreCase 使用区域敏感排序规则、固定区域来比较字符串,同时忽略被比较字符串的大小写。 Ordinal 使用序号排序规则比较字符串。 OrdinalIgnoreCase 使用序号排序规则并忽略被比较字符串的大小写,对字符串进行比较。 StringComparison.Ordinal 在进行调用String.Compare(string1,string2,StringComparison.Ordinal)的时候是进行非语言(non-linguistic)上的比较,API运行时将会对两个字符串进行byte级别的比较,因此这种比较是比较严格和准确的,并且在性能上也很好,一般通过StringComparison.Ordinal来进行比较比使用String.Compare(string1,string2)来比较要快10倍左右.(可以写一个简单的小程序验证,这个挺让我惊讶,因为平时使用String.Compare从来就没想过那么多).StringComparison.OrdinalIgnoreCase就是忽略大小写的比较,同样是byte级别的比较.性能稍弱于StringComparison.Ordinal. string类型中的Contains函数默认使用了Ordinal方式,所以速度会很快 其他的方法例如IndexOf,CompareTo等都默认使用了CurrentCulture方式,所以速度会相对比较满,可以调用的时候显示声明StringComparison的方式,速度会快很多,下面是测试: 在约1500个字符中查找一个字符‘q’,位于该序列的结尾处。 使用Ordinal方式的速度: 不使用Ordinal方式: 对比发现速度确实快了很多,在文本约庞大时候,效果会更加的明显。 from:https://blog.csdn.net/w199753/article/details/83421165
View DetailsES6基本语法入门
一、用let代替var声明变量 ES5中,我们可以在代码中任意位置声明变量,甚至可以重写已经声明的变量,ES6引入了一个let关键字,它是新的var。
1 2 3 |
let language = 'javascript'; let language = 'zj'; //此处会报错 console.log(language); |
因为同一作用域中let已经声明过了,所以再次声明会报错 二、常量 ES6还引入了const关键字,和let用法一样,唯一的区别就是,const变量是只读的 三、模板字符串拼接 用反引号拼接字符串
1 2 3 4 5 |
let language = 'javascript'; console.log(language); let lan = `此处写字符串 ${language}`; console.log(lan) //此处写字符串 javascript |
只要把变量写在${}里面就好了;模板字符串也可以识别空格,可可以用于多行的字符串,再也不用写\n了。 四、箭头函数
1 2 3 4 5 |
let circle = (x) => { const PI = 3.14; let area = PI * r * r; return area; } |
可以省略掉关键字function,如果函数只有一条语句,可以连关键字都省略掉
1 |
let circle2 = (x) => 3.14 * r * r; |
五、函数参数的默认值
1 2 |
let sum = (x = 1, y = 2, z = 3) => x + y + z; console.log(sum()); |
可以声明函数参数的默认值 六、声明展开和剩余参数 ES6展开操作符 …
1 2 3 4 5 6 7 8 9 |
let params = [1,2,3]; console.log(...params); //1 2 3 let pro = { one:0, two:1, three:2, }; console.log({...pro}); //{ one: 0, two: 1, three: 2 } |
七、数组解构
1 |
var [a, b] = ['x', 'y']; |
以上代码和下面的代码效果是一样的 a = 'x'; b = 'y'; 数组解构也可以进行值的互换 [x, y] = [y, x]; 八、使用面向对象biancheng
1 2 3 4 5 6 7 8 9 |
//ES5语法 function Book (title, page, isbn) { this.title = title; this.page = page; this.isbn = isbn; } Book.prototype.printTitle = function () { console.log(this.title); }; |
1 2 3 4 5 6 7 8 9 10 11 |
//ES6语法 class Desk { constructor (title, pages, isbn){ this.title = title; this.page = page; this.isbn = isbn; } printIsbn () { console.log(this.isbn); } } |
ES6只需要使用class关键字,声明一个有constructor函数和诸如printIsbn等其他函数的类; 我们可以用extends扩展一个类并继承它的行为
1 2 3 4 5 6 7 8 9 10 11 12 |
//ES6语法 class ITDesk extends Desk { constructor (title, pages, isbn){ this.title = title; this.page = page; this.isbn = isbn; } printIsbn () { console.log(this.isbn); } } |
更多es6细节请看: http://es6.ruanyifeng.com/#docs/array from:https://www.cnblogs.com/plBlog/p/11431429.html
View Detailsc# ado.net连接mysql报错“Reading from the stream has failed”
“Authentication to host ‘localhost’ for user ‘root’ using method ‘mysql_native_password’ failed with message: Reading from the stream has failed” 昨天晚上,因为某些原因,几天没打开的C#.net winform项目调试时突然启动失败,冒出来这个提示。 说实话,因为没抓着重点,我昨晚基本上就浪费了,虽然我猜到了是连接超时之类的原因,可一直没明白究竟是我弄错了什么,才会连接不上MySQL数据库 今天再找原因的时候,就Get到重点了:“Reading from the stream has failed”,这个是数据库返回的报错信息 搜索了一下,看到一个文章,说是从MySQL5.7以后,就增加了SSL连接验证功能,这个功能就可能导致上面这个报错,关掉它的话,连接速度能变快 尽管根据了解到的资料,SSL这个校验应该不会影响到使用 Localhost(本地)方式连接的才对,但还是死马当活马医,在ado.net连接字符串里加上了“SslMode=None;” 结果是成功的,确实不再报错,连接上了 再回过头来想想,我这两天也没对MySQL做过什么设置更改啊,仅有的操作,就是配置了一下ODBC数据源,怎么会突然间就出现这毛病呢? 不知道有没有大佬了解的,求科普 ———————————————— 版权声明:本文为CSDN博主「某店长」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/jdjdjdjdjdjd/article/details/89068331
View Detailslinux常用查看文件或日志命令
常见查看文件内容命令汇总如下: cat filename 查看日志,会打开整个文件,直接跑到最后面 tac filename 查看日志,会打开整个文件,倒序显示,不常用 more filename 查看日志,可以上下翻页,上下行移动显示 less filename 查看日志,和more命令类似,但不能往回翻页 tail -f filename 查看文件,实时显示最后一页 vi filename 查看或编辑文件 查找文件内容关键字方法: 先 执行命令>: vi filename 然后输入>: /查找字符串 按n查找下一个 示例: 如查找nohup.out日志文件的error关键字: 执行命令: vi nohup.out 输入以下回车: /error 按n查找下一个,按N(大写)查找上一个 将实时日志打印到指定文件: 示例: 将实时日志打印到文件newlog.log内,方便查找 执行命令: tail -f nohup.out >newlog.log 备注:newlog.log文件可以不存在,命令执行时会自动新建 from:https://www.cnblogs.com/whitemouseV2-0/p/9990676.html
View Detailsvconsole 的安装以及使用
1. 安装
1 |
npm install vconsole |
2. 使用 main.js
1 2 3 |
import Vconsole from 'vconsole' const vConsole = new Vconsole() Vue.use(vConsole) |
运行即可看到~右下角的vconsole from:https://blog.csdn.net/luckyzhoufangbing/article/details/95978480
View Detailsgit放弃暂存区的修改
1 2 3 4 5 6 7 8 |
暂存区的修改就是已经你已经将文件 add,但是还没有commit的时候。 此时HEAD执行最近一次提交的commit。 放弃暂存区的修改 git reset HEAD 然后可以执行 git diff --cached 比较一下暂存区和最近一次的commit的不同,应该是没有输出的。 |
from:https://blog.csdn.net/weixin_36149892/article/details/86597086
View Details