1. 云栖社区>
  2. PHP教程>
  3. 正文

多线程批量静态化 java与php【原创】

作者:用户 来源:互联网 时间:2017-12-01 15:27:30

java多线程网站

多线程批量静态化 java与php【原创】 - 摘要: 本文讲的是多线程批量静态化 java与php【原创】, 需求描述:现在网站的数量达到了3万多篇,全站都是静态化的,然而有时候改了网站的导航,问题大了。怎么办。跑php。单线程造成了我不得不停下其他工作,只为了跑脚本。而且中间可能会遇到错误,我又得重新开始跑。其次,进度条的问题。php在跑脚本的

需求描述:现在网站的数量达到了3万多篇,全站都是静态化的,然而有时候改了网站的导航,问题大了。怎么办。跑php。单线程造成了我不得不停下其他工作,只为了跑脚本。而且中间可能会遇到错误,我又得重新开始跑。

其次,进度条的问题。php在跑脚本的时候 除非在cli下,不然cgi下根本不知道后台执行的进度。这个问题相到的大。

解决方案1:参考张宴的文章, 他采用了php扩展机制,支持多线程。

解决方案2:用java来写,java原生就支持多线程的。而且IO性能好。(不用修改原来的代码) 支持进度条反馈。

思路:多线程采集新闻的方式。

接下来是代码实现,我稍候发布出来。

参考资料:http://blog.s135.com/pthreads/

import java.io.BufferedReader;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.Writer;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class WebContent { private static int kernel = 4;// 针对服务器内核数 public static void main(String args[]) {  MyThread t = new MyThread();  for (int i = 0; i < kernel; i++) {   new Thread(t).start();  } }}class MyThread implements Runnable { private int tickets = 34000; @Override public void run() {  String url = "http://www.d-shang.com/news/v/?id=";  // 获取id  while (tickets > 0) {   String filename = tickets + "";   // 创建文件   try {    String content = getOneHtml(url, filename);    if (content == null || content.length() < 200) {     System.out.print(filename + " 线程"       + Thread.currentThread().getId() + "不存在 跳过/r/n");     tickets--;     continue;    }    File file = new File("c://a/" + filename + ".html");    Writer out = null;    out = new FileWriter(file);    out.write(content);    out.close();   } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }   System.out.print(filename + " 线程" + Thread.currentThread().getId()     + "已生成 /r/n");   tickets--;  } } /**  * 读取一个网页全部内容  */ public String getOneHtml(String htmlurl, String filename)   throws IOException {  URL url;  String temp;  final StringBuffer sb = new StringBuffer();  try {   url = new URL(htmlurl + filename);   HttpURLConnection httpCon = (HttpURLConnection) url     .openConnection();   httpCon.setConnectTimeout(2000);   httpCon.setReadTimeout(2000);   httpCon.connect();// 建立连接   final BufferedReader in = new BufferedReader(new InputStreamReader(     url.openStream(), "utf-8"));// 读取网页全部内容   while ((temp = in.readLine()) != null) {    sb.append(temp);   }   in.close();  } catch (final MalformedURLException me) {   System.out.println("你输入的URL格式有问题。请仔细输入");   me.getMessage();   throw me;  } catch (final IOException e) {   return null;  }  return sb.toString(); }}

以上是多线程批量静态化 java与php【原创】的全部内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有其他相关内容,欢迎继续使用右上角搜索按钮进行搜索java , 多线程 , 网站 ,以便于您获取更多的相关知识。